Bootstrap

httpbest怎么接收服务器响应,BestHttp文档翻译 2

WebSocket

介绍

1:我们可以通过WebSocket类使用WebSocket功能。我们只需要将服务器的Uri传递给WebSocket的构造函数

2:创建

var webSocket = new WebSocket(new Uri("wss://html5labs-interop.cloudapp.net/echo"));

3:,OnOpen事件:在建立与服务器的连接时调用。在此事件回调之后,WebSocket的IsOpen属性将为True,直到我们或服务器关闭连接或发生错误。

webSocket.OnOpen += OnWebSocketOpen;

private void OnWebSocketOpen(WebSocket webSocket) { Debug.Log("WebSocket Open!"); }

4:,OnMessage事件:从服务器收到文本消息时调用。

webSocket.OnMessage += OnMessageReceived;

private void OnMessageReceived(WebSocket webSocket, string message) { Debug.Log("Text Message received from server: " + message); }

5:,OnBinary事件:从服务器收到二进制blob消息时调用。

webSocket.OnBinary += OnBinaryMessageReceived;

private void OnBinaryMessageReceived(WebSocket webSocket, byte[] message) { Debug.Log("Binary Message received from server. Length: " + message.Length); }

6:,OnClosed事件:在客户端或服务器关闭连接时调用,或发生内部错误。当客户端通过Close函数关闭连接时,它可以提供代码和消息,指示关闭的原因。服务器通常会回复我们的代码和消息。

webSocket.OnClosed += OnWebSocketClosed;

private void OnWebSocketClosed(WebSocket webSocket, UInt16 code, string message) { Debug.Log("WebSocket Closed!");}

7:OnError事件:当我们无法连接到服务器时调用,发生内部错误或连接丢失。第二个参数是Exception对象,但它可以为null。在这种情况下,检查WebSocket的InternalRequest应该告诉更多有关该问题的信息。

webSocket.OnError += OnError;

private void OnError(WebSocket ws, Exception ex)

{

string errorMsg = string .Empty;

if (ws.InternalRequest.Response != null)

{

errorMsg = string.Format("Status Code from Server: {0} and Message: {1}", ws.InternalRequest.Response.StatusCode, ws.InternalRequest.Response.Message);

}

Debug.Log("An error occured: " + (ex != null ? ex.Message : "Unknown: " + errorMsg));

}

8:OnErrorDesc事件:一个更具信息性的事件,此事件在OnError事件之后调用,因为后者仅使用Exception参数调用。但它可以提供更详细的错误报告。

webSocket.OnErrorDesc += OnErrorDesc;

void OnErrorDesc(WebSocket ws, string error) { Debug.Log("Error: " + error); }

9:在我们将所有事件注册完备之后,我们可以开始连接:

webSocket.Open();

在此步骤之后,我们将收到一个OnOpen事件的回调,我们可以开始向服务器发送消息。

// 发送字符串:

webSocket.Send("Message to the Server");

// 创建二进制流,并填充:

byte[] buffer = new byte[length];

//发送二进制流

webSocket.Send(buffer);

完成通信后/不需要的时候,关闭链接,无法重用已关闭的WebSocket实例。

webSocket.Close();

10:Ping消息:通过在收到OnOpen事件之前将StartPingThread属性设置为True,可以启动新线程将Ping消息发送到服务器。这样,Ping消息将定期发送到服务器。可以在PingFrequency属性中设置两次ping之间的延迟(默认值为1000ms).(相当于设置心跳包)

11:Pong消息:从插件服务器收到的所有ping消息将自动生成Pong应答。

12:Streaming:较长的文本或二进制消息将变得支离破碎。默认情况下,这些片段由插件自动组装。如果我们向WebSocket的OnIncompleteFrame事件注册事件处理程序,则可以覆盖此机制。每次客户端收到不完整的片段时都会调用此事件。这些片段将被插件忽略,它不会尝试组装这些片段,也不会存储它们。此事件可用于实现流式传输体验。(自定义组装消息).

使用Socket.IO

1:Socket.IO实现使用插件已有的功能。当轮询传输与其所有功能(cookie,连接重用等)一起使用时,它将发送HTTPRequests以获取握手数据,发送和接收数据包。 WebSocket实现用于WebSocket传输

1):易于使用和熟悉的api

2):兼容最新的Socket.IO规范

3):从轮询传输到websocket传输的无缝升级

4):断开时自动重新连接

5):简单高效的二进制数据发送和多种接收方式

6):在高级模式下使用它的强大工具(切换默认编码器,禁用自动解码等)

2:使用.如果要连接到Socket.IO服务,可以使用BestHTTP.SocketIO.SocketManager类来完成。首先,您必须创建一个SocketManager实例

using System; using BestHTTP;

using BestHTTP.SocketIO;

var manager = new SocketManager(new Uri("http://chat.socket.io/socket.io/"));

3:Url中的/socket.io/路径非常重要,默认情况下,Socket.IO服务器将侦听此查询。所以不要忘记测试!

4:Connecting to namespaces ,默认情况下,SocketManager将在连接到服务器时连接到根(“/”)命名空间。您可以通过SocketManager的Socket属性访问它:

Socket root = manager.Socket;

可以通过GetSocket('/ nspName')函数或通过manager的indexer属性访问非默认名称空间:

Socket nsp = manager["/customNamespace"];

// 等价于:

Socket nsp = manager.GetSocket("/customNamespace");

首次访问命名空间将启动内部连接过程

4:Subscribing and receiving events ,您可以订阅预定义和自定义事件。预定义事件是“连接”,“连接”,“事件”,“断开连接”,“重新连接”,“重新连接”,“重新连接”,“重新连接失败”,“错误”。("connect", "connecting", "event", "disconnect", "reconnect", "reconnecting", "reconnect_attempt", "reconnect_failed", "error". )自定义事件是程序员定义的事件,服务器将发送给您的客户端。您可以通过调用套接字的On函数来订阅事件:

manager.Socket.On("login", OnLogin);

manager.Socket.On("new message", OnNewMessage);

void OnLogin(Socket socket, Packet packet, params object[] args)

{

//Socket参数将是服务器发送此事件的namespace-socket对象

//Packet参数包含事件的内部分组数据。数据包可用于访问服务器发送的二进制数据,或使用自定义Json解析器lib解码有效负载数据。稍后会详细介绍。

//Args参数是一个可变长度数组,包含来自数据包有效负载数据的解码对象。使用默认的Json编码器,这些参数可以是“原始”类型(int,double,string)或对象列表(List对象)或Dictionary字符串,对象对象。

}

//服务器上面的代码写法,在一个 node.js 的服务器上面

socket.emit('message', ‘MyNick’, ‘Msg to the client’);

//客户端接收

// subscribe to the "message" event

manager.Socket.On("message", OnMessage);

// event handler

void OnMessage(Socket socket, Packet packet, params object[] args)

{

// args[0] is the nick of the sender

// args[1] is the message

Debug.Log(string.Format("Message from {0}: {1}", args[0], args[1]));

}

●“connect”:命名空间打开时发送。

●“connecting”:当SocketManager开始连接到socket.io服务器时发送。

●“event”:在自定义(程序员定义的)事件上发送。

●“disconnect”:当传输断开,SocketManager关闭,Socket关闭或在握手数据中指定的给定时间内没有从服务器收到Pong消息时发送。

●“reconnect”:插件成功重新连接到socket.io服务器时发送。

●“reconnecting”:当插件尝试重新连接到socket.io服务器时发送。

●“reconnect_attempt”:当插件尝试重新连接到socket.io服务器时发送。

●“reconnect_failed”:重新连接尝试无法连接到服务器并且ReconnectAttempt达到选项“ReconnectionAttempts”值时发送。

●“error”:在服务器或内部插件错误上发送。事件的唯一参数是BestHTTP.Soc

;