websocket 通信

最近做的项目,需要小数据实时通信,比如说学生登录,教师端实时显示登录信息;教师控制学生端进入新的页面或者同一控制流程,这些都可以用到websocket。

在我理解,websocket像是一个镜子,可以折射所有的光芒。任何一个连接websocket 服务器的客户端都可以发信息给服务器,服务器会转发出这些信息给所有的客户端。也可以给每个客户端指定名称,比如一个客户端为A,一个客户端为B,A想要给B发送数据的时候,A向服务器发送数据的目标名称可以设置为B ,这样B就会接收到信息了,而C,D用户接收不到信息。 

1,首先建立websocket 服务器

2,客户端建立与服务器的连接

    function (result) {
                if (result != null) {
                    var data = JSON.parse(result.json);
                    nNetIP = data.socketIP;
                    nNetPort = data.websocketPort;
                    nSocketPort = data.socketPort;
                    try {
                        var address = "ws://" + nNetIP + ":" + nNetPort;
                        window.ws = new wsImpl(address);

                        ws.onopen = function () {
                            //开始连接
                            ws.send(JSON.stringify({
                                "MsgType": "login",
                                "userID": usercode,
                                "userType": "auctionstudent"//指定当前客户端的名称
                            }))

                        };
                        //返回数据
                        ws.onmessage = function (evt) {
                            processInformation(evt.data);
                        };
                        ws.onclose = function () {
                            //开始关闭

                        }
                        ws.onerror = function () {

                            //发生错误
                            console.log("错误");
                            ws = new wsImpl(address);

                        }

                        window.onbeforeunload = function (event) {
                            console.log("关闭WebSocket连接!");
                            webSocket.close();

 

             }
                    } catch (err) {

                    }
                }
            }

3,发送数据(指定接收用户)

  ws.send(
                    JSON.stringify({
                        "MsgType": "message",
                        "message": { "type": "sendenterauction", "sacode": sacode, "currtime": result.currtime },
                        "targetUserType": ["auctionstudent"]//指定接收目标名称
                    }));

4,接收数据

 //处理接收到的信息
    function processInformation(data) {
        var info;
        try {
            info = JSON.parse(data);
        }
        catch (err) {
            //在此处理错误 
            return;
        }

        if (info.sacode == sacode) {

            
            if (info.type == "sendenterauction") {
               
                }
            }
        }
    }

  

posted @ 2018-07-07 16:25  JaneAi  阅读(353)  评论(0编辑  收藏  举报