如何获取微网站模板的详细报价?
摘要:网站开发明细报价表,微网站模板前后台,网上给别人做网站,聊城集团网站建设加盟WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中&
网站开发明细报价表,微网站模板前后台,网上给别人做网站,聊城集团网站建设加盟WebSocket使得客户端和服务器之间的数据交换变得更加简单#xff0c;允许服务端主动向客户端推送数据。在WebSocket API中#xff0c;浏览器和服务器只需要完成一次握手#xff0c;两者之间就直接可以创建持久性的连接#xff0c;并进行双向数据传输。
WebSocket与http
其…WebSocket使得客户端和服务器之间的数据交换变得更加简单允许服务端主动向客户端推送数据。在WebSocket API中浏览器和服务器只需要完成一次握手两者之间就直接可以创建持久性的连接并进行双向数据传输。
WebSocket与http
其实从历史上来讲websocket是为了克服http无法双向通信而引入的在通常的使用中可以复用http的端口与功能除此外他们没有其他的联系而是完全是独立的协议通常情况下http是单向的web 服务而websocket是全双工的服务器和客户端可以实时的传输信息在引用时他们可以在http服务器上同时部署特别是在NodeJs中。
WebSocket与Socket
那么websocket和socket是什么关系呢 其实可以理解为websocket是在socket的基础上实现的其基于消息帧和TCP协议而socket更通用在编程中可以选在tcpudp也需要自己控制数据流格式每次的数据的长度都需要自己控制与读取。
下边记录两种Unity客户端使用WebSocket的方法。
1.不使用插件的客户端
引入System.Net.WebSockets;命名空间。
在使用过程中发现这种方法打包WebGl的的时候是存在问题的。
具体使用方法如下
WebSocket 类 (System.Net.WebSockets) | Microsoft Learn Unity客户端代码
using System;
using System.Net.WebSockets;
using System.Text;
using System.Threading;
using UnityEngine;
using UnityEngine.UI;public class test4 : MonoBehaviour
{private void Start(){WebSocket();}public async void WebSocket(){try{ClientWebSocket ws new ClientWebSocket();CancellationToken ct new CancellationToken();//添加header//ws.Options.SetRequestHeader(X-Token, eyJhbGciOiJIUzI1N);Uri url new Uri(ws://xxx.xxx.xxx.xx:18x/xxx/xxx);await ws.ConnectAsync(url, ct);await ws.SendAsync(new ArraySegmentbyte(Encoding.UTF8.GetBytes(hello)), WebSocketMessageType.Binary, true, ct); //发送数据while (true){var result new byte[1024];await ws.ReceiveAsync(new ArraySegmentbyte(result), new CancellationToken());//接受数据var str Encoding.UTF8.GetString(result, 0, result.Length);Debug.Log(str);}}catch (Exception ex){Console.WriteLine(ex.Message);}}}2.使用Best HTTP插件
这款插件不但支持WebSockets还支持HTTPSockets等通信方式是一款不错的插件。也支持打包Webgl
插件地址
https://download.csdn.net/download/f402455894/87597949?spm1001.2014.3001.5501
客户端代码
using UnityEngine;
using System;
using BestHTTP.WebSocket;
using Newtonsoft.Json;public class GaoYaGuHuaLu : MonoBehaviour
{string address ws://10.xxx.xx.193:1880/xxx;WebSocket webSocket;public GaoYaGuHuaLuEntity gaoYaGuHuaLu new GaoYaGuHuaLuEntity();private void Awake(){}private void Start(){Init();}public void Init(){if (webSocket null){webSocket new WebSocket(new Uri(address));#if !UNITY_WEBGLwebSocket.StartPingThread true;
#endif// Subscribe to the WS eventswebSocket.OnOpen OnOpen;webSocket.OnMessage OnMessageRecv;webSocket.OnBinary OnBinaryRecv;webSocket.OnClosed OnClosed;webSocket.OnError OnError;// Start connecting to the serverwebSocket.Open();}}public void Destroy(){if (webSocket ! null){webSocket.Close();webSocket null;}}void OnOpen(WebSocket ws){Debug.Log(OnOpen: );// webSocket.Send(我来啦);}void OnMessageRecv(WebSocket ws, string message){Debug.LogFormat(OnMessageRecv: msg{0}, message);}void OnBinaryRecv(WebSocket ws, byte[] data){Debug.LogFormat(OnBinaryRecv: len{0}, data.Length);}void OnClosed(WebSocket ws, UInt16 code, string message){Debug.LogFormat(OnClosed: code{0}, msg{1}, code, message);webSocket null;}void OnError(WebSocket ws, string ex){string errorMsg string.Empty;
#if !UNITY_WEBGL || UNITY_EDITORif (ws.InternalRequest.Response ! null){errorMsg string.Format(Status Code from Server: {0} and Message: {1}, ws.InternalRequest.Response.StatusCode, ws.InternalRequest.Response.Message);}
#endifDebug.LogFormat(OnError: error occured: {0}\n, (ex ! null ? ex : Unknown Error errorMsg));webSocket null;}public void OnClose(){// 关闭连接webSocket.Close(1000, Bye!);}
}
