初探WebSocket

定义

    WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行==全双工通讯的协议==。
WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在 WebSocket API 中,浏览器和服务器==只需要完成一次握==手,两者之间就直接可以==创建持久性的连接==,并进行双向数据传输。
    WebSocket 能够解决使用Ajax轮询请求的方式进行客户端与服务器之前的数据交换而带来的带宽资源耗费问题;如下图
avatar

API
var Socket = new WebSocket(url, [protocol] );第一个参数 url, 指定连接的 URL。第二个参数 protocol 是可选的,指定了可接受的子协议。
属性描述
Socket.readyState只读属性 readyState 表示连接状态,可以是以下值:0 - 表示连接尚未建立。1 - 表示连接已建立,可以进行通信。2 - 表示连接正在进行关闭。3 - 表示连接已经关闭或者连接不能打开。
WebSocket 事件
事件事件处理程序描述
openSocket.onopen连接建立时触发
messageSocket.onmessage客户端接收服务端数据时触发
errorSocket.onerror通信发生错误时触发
closeSocket.onclose连接关闭时触发
WebSocket 方法
方法描述
Socket.send()使用连接发送数据
Socket.close()关闭连接
应用:简单聊天工具

首先我们的栗子是基于Node环境,不明白的请先绕路于Node;websocket服务js如下:

//引入websocket的模块
var ws = require("nodejs-websocket")

var PORT = 3000

var clientCount = 0
//创建一个websocket服务
var server = ws.createServer(function (conn) {
    console.log("New connection")
    clientCount++
    conn.nickname = 'user' + clientCount
    var mes = {}
    mes.type = "enter"
    mes.data = conn.nickname + 'comes in'
    broadcast(JSON.stringify(mes))
//接收客户端发送的信息事件监听
    conn.on("text", function (str) {
        console.log("Received "+str)
        var mes = {}
        mes.type = "message"
        mes.data = conn.nickname + ' says: ' + str
        broadcast(JSON.stringify(mes))
    })
//断开客户端与服务端联系事件监听
    conn.on("close", function (code, reason) {
        console.log("Connection closed")
        var mes = {}
        mes.type = "leave"
        mes.data = conn.nickname + 'left'
        broadcast(JSON.stringify(mes))

    })
//错误监听
    conn.on("error", function(err){
        console.log("handle err")
        console.log(err)
    })
}).listen(PORT)

console.log("websocket server listening on port " + PORT)
//广播发送接收到的消息
function broadcast(str){
    server.connections.forEach(function(connection){
        connection.sendText(str)
    })
}

----启动端口3000服务
客户端代码如下:

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8" />
    <title>Websocket</title>
</head>

<body>
    <h1>Chat Room</h1>
    <input id="sendTxt" type="text">
    <button id="sendBtn">发送</button>
    <script type="text/javascript">
        var websocket = new WebSocket("ws://localhost:3000/");
        function showMessage(str, type) {
            var div = document.createElement('div');
            div.innerHTML = str;
            if (type == "enter") {
                div.style.color = "blue";
            } else if (type == "leave") {
                div.style.color = "red";
            }
            document.body.appendChild(div);
        }
        websocket.onopen = function () {
            console.log('websocket open');
            document.getElementById("sendBtn").onclick = function () {
                var txt = document.getElementById("sendTxt").value;
                if (txt) {
                    websocket.send(txt);
                }
            }
        }
        websocket.onclose = function () {
            console.log('websocket close');
        }
        websocket.onmessage = function (e) {
            console.log(e.data);
            var mes = JSON.parse(e.data);
            showMessage(mes.data, mes.type);
        }
    </script>
</body>
</html>
打开运行这个html就能够看到一个简版的基于websocket聊天工具;
好了,以上便是个人学习分享的一些东西;

转载于:https://www.cnblogs.com/zdf-xue/p/10799889.html

WebSocket的自动回复是指当WebSocket服务器收到来自客户端的消息,可以自动回复消息客户端。在woole中,可以通过写相应的回函数来实现自动回复的功能。 首先,需要在WebSocket服务器的onMessage回调函数中编写处理收到消息的逻辑。当服务器接收到客户端的数据帧时,会回调此函数,并传入swoole_websocket_server对象和swoole_websocket_frame对象作为参数。可以通过$swoole_websocket_frame->data获取客户端发送的消息内容。 在这个回调函数中,可以根据消息内容做相应的处理,然后通过$swoole_websocket_server->push方法将回复消息发送给客户端。push方法的第一个参数是客户端的socket id,可以通过$swoole_websocket_frame->fd获取,第二个参数是要发送的消息内容。 下面是一个示例代码,展示了如何实现WebSocket的自动回复功能: ```php function onMessage(swoole_websocket_server $server, swoole_websocket_frame $frame) { // 获取客户端发送的消息内容 $message = $frame->data; // 根据消息内容做相应的处理 // ... // 回复消息给客户端 $replyMessage = "这是自动回复的消息"; $server->push($frame->fd, $replyMessage); } ``` 在这个示例中,当收到客户端发送的消息后,会自动回复一条固定的消息给客户端。 需要注意的是,WebSocket的自动回复功能可以根据实际需求进行扩展和修改。可以根据不同的消息内容,编写不同的逻辑来实现自定义的自动回复功能。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Swoole WebSocket初探](https://blog.csdn.net/qq_41156103/article/details/91882903)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值