If you want to update a list in real time, the traditional approach is to use polling. Taking the web as an example, the server is regularly requested through Ajax and then the data is obtained and displayed on the page. This method is simple to implement, but the disadvantage is that it wastes resources.
HTTP1.1 has newly added support for websocket, so that passive display can be transformed into active notification. That is, a persistent connection is maintained with the server through websocket. Once the data changes, the server notifies the client that the data has been updated, and then refreshes and other operations are performed. This eliminates many unnecessary passive requests and saves server resources.
To implement a webscoket program, you first need to use a browser that supports HTML5
if(ws === null){ var wsServer = 'ws://'+ location.hostname +':8888'; ws = new WebSocket(wsServer); ws.onopen = function(){ console.log("socket连接已打开"); }; ws.onmessage = function(e){ console.log("message:" + e.data); }; ws.onclose = function(){ console.log("socket连接已断开"); }; ws.onerror = function(e){ console.log("ERROR:" + e.data); }; //离开页面时关闭连接 $(window).bind('beforeunload',function(){ ws.close(); } ); }
In this way, a client is implemented, but the matter is far from over. The above code simply performs basic actions such as connection, dialogue, and shutdown. If you want to communicate with the server, you must have a more specific solution. For example, when receiving a message, determine the type and perform further operations.
Server side: Swoole is used here for websocket development on the PHP server. It is very simple to use Swoole for PHP websocket development, and it also supports httpserver.
$server = new swoole_websocket_server("0.0.0.0", 8888); $server->on('open', function (swoole_websocket_server $server, $request) { echo "server: handshake success with fd{$request->fd}\n"; }); $server->on('message', function (swoole_websocket_server $server, $frame) { echo "receive from {$frame->fd}:{$frame->data},opcode:{$frame->opcode},fin:{$frame->finish}\n"; $server->push($frame->fd, "this is server"); }); $server->on('close', function ($ser, $fd) { echo "client {$fd} closed\n"; }); $server->start();
swoole is a php extension, you can refer to the installation method here: How to install swoole extension in php
This article is written here first. The next article will write some more specific operations. Interested friends please continue to pay attention to this site. Thanks!