警告:這是 alpha 版本程式碼,不應用於生產用途。
Haxe 的擴充庫,用於簡化客戶端/伺服器連線的設定。它支援以下內容:
hxnet 使用兩個支援的傳輸層:TCP 和 UDP。 TCP 通常用於可靠的服務,例如 HTTP、FTP、Telnet 等。 UDP 是無連線的,用於快速傳輸對遊戲有用的不可靠資料。
傳輸層之上是客戶端類別和伺服器類別。它們處理簡單的連接、資料傳輸/檢索和異常。 UDP 類別根據從不同 IP 位址接收的資料和逾時值來偽造連接,以確定連接何時斷開。
建立客戶端或伺服器物件時,您需要向其傳遞協定。協定定義了客戶端和伺服器之間的特定互動。例如,您可以建立基於自訂 RPC 的協議,該協議可以輕鬆地從客戶端呼叫伺服器上的函數(反之亦然)。協定的另一個範例是 HTTP,它可以產生從伺服器到瀏覽器的回應。
假設您想要建立一個基本的 telnet echo 伺服器。我們可以透過擴展 Telnet 協定並重寫lineReceived
函數來實現這一點。
class Echo extends hxnet.protocols. Telnet
{
override private function lineReceived ( line : String )
{
writeLine ( line );
}
static public function main ()
{
var server = new hxnet.tcp. Server ( new hxnet.base. Factory ( Echo ), 4000 );
server . start ();
}
}
main 函數建立一個 TCP 伺服器實例(連接埠 4000),並使用 Factory 基底類別為每個用戶端連線建立一個新的 Echo 實例。然後它調用start
,這是監聽端口並無限更新的快捷方式。
您可能想要連接到伺服器以檢索資料。預設情況下,hxnet 會阻止所有連接,這可能會導致 gui 應用程式出現問題,因為它會鎖定渲染。我們可以透過將blocking
設為 false 來解決這個問題。
class Client extends hxnet.protocols. Telnet
{
override private function lineReceived ( line : String )
{
trace ( line );
}
static public function main ()
{
var client = new hxnet.tcp. Client ();
client . protocol = new Client (); // set the protocol we want to use
client . connect ( " localhost " , 4000 );
client . blocking = false ; // important for gui clients
while ( true )
{
client . update ();
// add application logic here
}
}
}
版權所有 (C) 2013-2014 馬特塔特爾
特此免費授予任何獲得本軟體和相關文件文件(「軟體」)副本的人不受限制地使用本軟體,包括但不限於使用、複製、修改、合併的權利、發布、分發、再授權和/或銷售軟體的副本,並允許向其提供軟體的人員這樣做,但須滿足以下條件:
上述版權聲明和本授權聲明應包含在本軟體的所有副本或主要部分中。
本軟體以「現況」提供,不提供任何明示或暗示的保證,包括但不限於適銷性、特定用途的適用性和不侵權的保證。 IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE軟體.