nuget包直接搜索fleck
在webapi里直接写
public Task<string> customerwebsocket(string code)
{
Guid guid = System.Guid.NewGuid();
var allSockets = new List<IWebSocketConnection>();
var server = new WebSocketServer("ws://127.0.0.1:6001");
server.Start(socket =>
{
socket.OnOpen = () =>
{
//连接成功
//添加连接人
allSockets.Add(socket);
//连接成功
};
socket.OnMessage = message =>
{
//接受消息
//所有连接发消息
allSockets.ToList().ForEach(s => s.Send("客户端 Echo: " + message));
};
socket.OnClose = () =>
{
//断开连接
};
//关闭连接
socket.Close();
});
return Task.FromResult("ws://127.0.0.1:6001");
}
侦听错误后自动重启
设置为RestartAfterListenError
trueWebSocketConnection
设置为RestartAfterListenError
true
WebSocketConnection
server.RestartAfterListenError = true;
启用安全连接需要两件事:改用方案 的 ,并将 Fleck 指向一个 x509 证书,该证书包含一个 public 和 私钥wssws
var server = new WebSocketServer("wss://0.0.0.0:8431");
server.Certificate = new X509Certificate2("MyCert.pfx");
server.Start(socket =>
{
//...use as normal
});
制作证书时遇到问题?请参阅本指南https://github.com/statianzo/Fleck/issues/214#issuecomment-364413879
fleck向单人发送消息
//定义全局字典
private Dictionary<string, IWebSocketConnection> socketCache = new Dictionary<string, IWebSocketConnection>();
//在socket.OnMessage接收到消息后向外发送
//messages["code"].ToString()为回传的接收人id
//Dictionary<string, IWebSocketConnection> string类型为自定义的GUID
//IWebSocketConnection 为 socket方法
socketCache.Where(a => a.Key == messages["code"].ToString()).ToList().ForEach(a => a.Value.Send(connectionInfo.Id.ToString() + "消息" + messages["busiessesID"].ToString()));
H5端接收
WebSocket 属性
以下是 WebSocket 对象的属性。假定我们使用了以上代码创建了 Socket 对象:
属性 | 描述 |
---|---|
Socket.readyState | 只读属性 readyState 表示连接状态,可以是以下值:
|
Socket.bufferedAmount | 只读属性 bufferedAmount 已被 send() 放入正在队列中等待传输,但是还没有发出的 UTF-8 文本字节数。 |
WebSocket 事件
以下是 WebSocket 对象的相关事件。假定我们使用了以上代码创建了 Socket 对象:
事件 | 事件处理程序 | 描述 |
---|---|---|
open | Socket.onopen | 连接建立时触发 |
message | Socket.onmessage | 客户端接收服务端数据时触发 |
error | Socket.onerror | 通信发生错误时触发 |
close | Socket.onclose | 连接关闭时触发 |
WebSocket 方法
以下是 WebSocket 对象的相关方法。假定我们使用了以上代码创建了 Socket 对象:
方法 | 描述 |
---|---|
Socket.send() | 使用连接发送数据 |
Socket.close() | 关闭连接 |
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
</head>
<body>
<div>消息</div>
</body>
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.js"></script>
<script>
$.ajax({
type: "post",
url:"http://localhost:8000/api/app/busiesses-login/websockets",
data:{
"code":"123"
},
success:function(res){
const url = res.data
console.log(url)
var sock = new WebSocket(url);//此时的值:ws://127.0.0.1:6001
sock.onopen = function(e){
//连接成功
console.log(e)
}
sock.onmessage = function (e) {
//接收消息
console.log(e.data)
};
sock.onclose = function(e){
//关闭
console.log(e)
}
//每隔两秒发送一次消息
setInterval(()=>{
sock.send("123")
},2000)
}
})
</script>
</html>