利用WebScocket实现消息推送
2017-12-11 11:23
211 查看
在Web应用中,HTTP协议只支持“请求-响应”模式,即客户端(浏览器)要获取信息只能主动发起请求。在许多需要消息主动推送的场景中,例如:网络聊天室、消息到达提醒等,存在不便。Websocket基于TCP协议,建立一条浏览器到服务器的全双工消息通道,使得服务器可以实时主动推送消息。
websocket的特点
事件驱动
异步
使用ws或者wss协议的客户端socket
能够实现真正意义上的推送功能
缺点:支持程度因浏览器的差异而不同。
websocket客户端
websocket是事件驱动的,主要的事件监听函数有一下几个
常用的函数有
websocket服务器端
websocket的服务器端有多种实现方式,可以根据应用的不同做出不同选择,例如golang, php, java…主要要处理的问题是并发、会话管理。
PHP 中, swoole是一个面向生产环境的 PHP 异步网络通信引擎,使 PHP 开发人员可以编写高性能的异步并发 TCP、UDP、Unix Socket、HTTP,WebSocket 服务。
下面用一个demon来展示利用swoole php搭建一个简单的websocket推送示例。
客户端
websocket的特点
事件驱动
异步
使用ws或者wss协议的客户端socket
能够实现真正意义上的推送功能
缺点:支持程度因浏览器的差异而不同。
websocket客户端
websocket是事件驱动的,主要的事件监听函数有一下几个
函数名称 | 事件 |
---|---|
onopen | 建立网络连接时触发 |
onerror | 网络出错时触发 |
onclose | 连接关闭时触发 |
onmessage | 收到数据时触发 |
函数名称 | 功能 |
---|---|
new WebSocket() | 新建连接 |
send | 向服务器发送数据 |
close | 关闭连接 |
websocket的服务器端有多种实现方式,可以根据应用的不同做出不同选择,例如golang, php, java…主要要处理的问题是并发、会话管理。
PHP 中, swoole是一个面向生产环境的 PHP 异步网络通信引擎,使 PHP 开发人员可以编写高性能的异步并发 TCP、UDP、Unix Socket、HTTP,WebSocket 服务。
下面用一个demon来展示利用swoole php搭建一个简单的websocket推送示例。
//服务端代码 $serv = new swoole_websocket_server(":", 8080); //如下可以设置多端口监听 //$server = new swoole_websocket_server("0.0.0.0", 9501, SWOOLE_BASE); //$server->addlistener('0.0.0.0', 9502, SWOOLE_SOCK_UDP); $serv->set(['worker_num' => 1]); $serv->on('Open', function($server, $req) { //客户端连接时 //可自定义会话管理 global $reqs; $reqs[$id]=$req->fd; echo "connection open: ".$req->fd."\n"; var_dump(count($reqs));//输出长连接数 }); $serv->on('Message', function($server, $frame) { //收到来自客户端的消息时 global $reqs; echo "message: ".$frame->data."\n"; foreach($reqs as $fd){ $server->push($fd, $frame->data); } }); $serv->on('Close', function($server, $fd) { //关闭连接时 global $reqs; echo "connection close: ".$fd."\n"; }); //开启服务,监听端口 $serv->start();
客户端
<html> <head> </head> <script> var wsl= 'ws://10.9.12.21:8080?id=1' ws = new WebSocket(wsl);//新建立一个连接 //如下指定事件处理 ws.onopen = function(){ws.send('Test!'); }; ws.onmessage = function(evt){console.log(evt.data);/*ws.close();*/}; ws.onclose = function(evt){console.log('WebSocketClosed!');}; ws.onerror = function(evt){console.log('WebSocketError!');}; </script> <body> </body> </html>
相关文章推荐
- Android中利用App实现消息推送机制的代码
- Android开发之利用MQTT协议实现消息的即时推送
- c#,利用个推实现APP消息推送
- android利用WebSocket实现消息推送
- android 利用androidnp实现消息推送
- .NET利用SignalR实现选择性消息推送
- Android中利用App实现消息推送机制的代码
- Android的消息推送系列之利用第三方平台实现消息推送
- 利用通知实现App从推送消息启动的页面跳转
- Android开发之利用MQTT协议实现消息的即时推送
- Jpush之如何利用HttpClient实现消息推送到手机
- Android开发之利用XMPP协议实现消息的即时推送
- Android开发之利用MQTT协议实现消息的即时推送
- Android中利用App实现消息推送机制的代码
- 利用Socket.io 实现消息实时推送功能
- 后台消息推送利用Call Directory Extension实现QQ电话效果
- 利用websocket实现安卓消息推送
- Android中利用App实现消息推送机制的代码
- 利用websocket实现android消息推送