在創建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); }; }