小程序实现websocket通信+c#

其他环境
¥20.00

场景:小程序+c# Api(https://xxxx.com)

小程序端代码:

openSocket() {
		//打开时的动作
		wx.onSocketOpen(() => {
			console.log('WebSocket 已连接')
			this.globalData.socketStatus = 'connected';
			this.sendMessage();
		})
		//断开时的动作
		wx.onSocketClose(() => {
			console.log('WebSocket 已断开')
			this.globalData.socketStatus = 'closed'
		})
		//报错时的动作
		wx.onSocketError(error => {
			console.error('socket error:', error)
		})
		// 监听服务器推送的消息
		wx.onSocketMessage(message => {
			//把JSONStr转为JSON
			message = message.data.replace(" ", "");
			if (typeof message != 'object') {
				message = message.replace(/\ufeff/g, ""); //重点
				var jj = JSON.parse(message);
				message = jj;
			}
			console.log("【websocket监听到消息】内容如下:");
			console.log(message);
		})
		// 打开信道
		wx.connectSocket({
			url: "wss://xxx.com:7788",
		})
	},

服务端:

 /*与网站的端口号不一致,与websocket地址的端口号保持一致*/
            var socketServer = new Fleck.WebSocketServer("wss://0.0.0.0:7788");

             /*发生错误自动重启*/
            socketServer.RestartAfterListenError = true;
            socketServer.Start(socket =>{
                socket.OnOpen = () =>{
                    new WebSocket().OnOpen(socket);
                };
                socket.OnClose = () =>{
                    new WebSocket().OnClose(socket);
                };
                socket.OnMessage = Message =>{
                    new WebSocket().OnMessage(socket, Message);
                };
                socket.OnError = err =>{
                    throw err;
                };
            });


1607328435(1).png

最佳答案

原因分析

使用https安全连接指向包含公钥和私钥的x509证书

小程序端没问题

服务端改为:

 /*与网站的端口号不一致,与websocket地址的端口号保持一致*/
            var socketServer = new Fleck.WebSocketServer("wss://0.0.0.0:7788");

          
            socketServer.Certificate = new X509Certificate2(ssl证书信息);
            /*发生错误自动重启*/
            socketServer.RestartAfterListenError = true;
            socketServer.Start(socket =>
            {
                socket.OnOpen = () =>
                {
                    new ImServer.FleckWebSocket().OnOpen(socket);
                };
                socket.OnClose = () =>
                {
                    new ImServer.FleckWebSocket().OnClose(socket);
                };
                socket.OnMessage = Message =>
                {
                    new ImServer.FleckWebSocket().OnMessage(socket, Message);
                };
                socket.OnError = err =>
                {
                    throw err;
                };
            });


talia1 T0 被采纳率92%
2020-12-07 16:24
打赏 0 0
页面统计
205 访问
0 帮助
0.02 打赏

hierror 2019 © hierror.com 京ICP备13026190号-1

通知消息
  • 暂无任何消息