在创建web socket通讯后,发送数据时,出现下图所示现象:
web
function TestSockets() { //实例化一个WebSocket对象 var socket = new WebSocket("ws://127.0.0.1:8000/ws"); //声明一个消息 var message = { nickname: "benben_2015", email: "123456@qq.com", content: "I love programming" }; //web sockets只能经过链接发送纯文本数据,因此对于复杂的数据结构,在经过链接发送以前,必须进行序列化。 socket.send(JSON.stringify(message)); }
这样问题的缘由就很明显了,之因此数据不能发送出去,是由于websocket还处在“CONNECTING”状态下,链接尚未成功。服务器
只要在函数中添加对状态的判断,在状态为OPEN时,执行send方法便可。方法一代码以下:websocket
function TestSockets() { var socket = new WebSocket("ws://127.0.0.1:8000/ws"); var message = { nickname: "benben_2015", email: "123456@qq.com", content: "I love programming" }; //添加状态判断,当为OPEN时,发送消息 if (socket.readyState===1) { socket.send(JSON.stringify(message)); }else{ //do something } }
function TestSockets() { var socket = new WebSocket("ws://127.0.0.1:8000/ws"); var message = { nickname: "benben_2015", email: "123456@qq.com", content: "I love programming" }; message = JSON.stringify(message); //添加事件监听 socket.addEventListener('open', function () { socket.send(message) }); }
function TestSockets() { var socket = new WebSocket("ws://127.0.0.1:8000/ws"); //设置链接成功后的回调函数 socket.onopen=function () { console.log("socket has been opened"); var message = { nickname: "benben_2015", email: "123456@qq.com", content: "I love programming" }; message = JSON.stringify(message); socket.send(message); }; }