最近的项目用到websocket了,使用过程中遇到的一些问题,记录一下。
后端用的.net的SignalR来发送消息,我用websocket连接成功后,一直没有推消息过来,后端小哥说数据已经在推了
this.socket = new WebSocket(url);
this.socket.onopen =(event)=>{
console.log('连接成功')
}
this.socket.onmessage = (event) => {
console.log(event.data) // 这里打印不出来
};
后来上网一搜,发现需要客户端先发一条信息给服务端,这样握手成功之后,浏览器就能看到发过来的数据了
this.socket.onopen = (event) => {
console.log('连接成功')
//打开后立即发送
this.send(`{"protocol":"json", "version":1}${String.fromCharCode(0x1e)}`);
};
SignalR发送过来的数据都是以0x1e结尾,所以我们在用JSON.parse格式化数据前,要先截掉SignalR自带的小尾巴
const suffix_code = String.fromCharCode(0x1e);
const arr = event.data.split(suffix_code)
const data = JSON.parse(arr[0]);