2009-09-21 48 views
0

這個問題我問了幾個星期前,有關端口 Rebol Smallest Http Server in the World: why first wait listen-port?雷博爾自對象

監聽端口是一個對象

第一監聽端口是自所以仍然不明白爲什麼自己不等於監聽端口,這就是爲什麼我們需要

http-port: first wait listen-port 

如果等待返回監聽端口和第一監聽端口是相同的自我或偵聽端口,則上面的代碼是不一樣的

http-port: wait listen-port 

回答

1

listen-port是一個端口!價值,而不是一個對象!值。港口!可以被看作是從對象派生的!數據類型並具有專門的用途。 FIRST行爲(與所有其他行爲!值一樣)是多態的。

對象!值返回該對象上下文中定義的單詞列表(加上特殊的自引用單詞「self」):

foo: make object! [bar: 3] 
first foo 
== [self bar] 

For port!值,FIRST將根據端口有兩種不同的行爲!類型:

  • 客戶端端口:它將PICK動作發送到端口內部處理程序(第一個端口==選擇端口1)。

  • 服務器端口:它會調用ACCEPT動作到底層C套接字來檢索一個新的連接端口!價值,允許與客戶溝通。

所以:

wait listen-port 

當一個事件發生時返回監聽端口值。

http-port: first wait listen-port 

返回一個新的端口!連接到'http-port引用的客戶端的值。

+0

它不分配新的端口。接受的套接字使用與偵聽套接字相同的端口。 – EJP 2016-01-19 01:26:35

+0

@EJP你誤解了什麼'端口!值「在Rebol中意味着它是一個高級抽象,而不是C級套接字和端口號。在上面的代碼中,'http-port'和'listen-port'實際上是兩個不同的端口!值。 – DocKimbel 2016-05-25 09:30:02