如何在创建和连接后配置websocket

时间:2017-02-26 22:58:30

标签: javascript html5 websocket

我正在从教程中查看此代码:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" >
    <title>WebSocket Test</title>
    <script language="javascript" type="text/javascript">
        var wsUri = "ws://localhost:8081";
        var output;

        function init(){
            output = document.getElementById("output");
            testWebSocket();
        }
        function testWebSocket(){

            websocket = new WebSocket(wsUri);



            websocket.onopen = onOpen;

            websocket.onclose = onClose;

            websocket.onmessage = onMessage;

            websocket.onerror = onError;

        }

        function onOpen(evt){
            writeToScreen("CONNECTED");
            doSend("WebSocket rocks");
        }

        function onClose(evt){
            writeToScreen("DISCONNECTED");
        }

        function onMessage(evt){
            writeToScreen('<span style="color: blue;">RESPONSE: ' + evt.data + '</span>');
            websocket.close();
        }

        function onError(evt){
            writeToScreen('<span style="color: red;">ERROR:</span> ' + evt.data);
        }

        function doSend(message){
            writeToScreen("SENT: " + message);
            websocket.send(message);
        }

        function writeToScreen(message){
            var pre = document.createElement("p");
            pre.style.wordWrap = "break-word";
            pre.innerHTML = message;
            output.appendChild(pre);
        }

        window.addEventListener("load", init, false);

    </script>
</head>
<body>
<h2>WebSocket Test</h2>
<div id="output"></div>
</body>
</html>

我很困惑如何在创建后配置websocket。我看到这些步骤的方式是:

websocket是用new创建的。 作为创建的一部分,建立了连接。 然后添加四个on___函数。 这意味着onOpen函数在连接到服务器之后附加到Web套接字当然没有意义。

我认为连接是在创建时进行的,因为我在其他任何地方都没有看到对websocket的任何连接或函数调用。 websocket对象是否可以检测何时分配功能?我觉得我的误解可能就是这个。该教程也有效,所以它不仅仅是一个糟糕的例子。任何澄清将不胜感激。

我尝试评论onOpen赋值和onError赋值,而客户端似乎仍然支持我的理论它们实际上并没有被使用。但是,我还注释了onmessage赋值,并显示“CONNECTED”屏幕,表明确实使用了onOpen。

0 个答案:

没有答案