workerman实现聊天室
Workerman的一些應(yīng)用方向如下
現(xiàn)在我們就可以做一個聊天室,關(guān)鍵代碼如下:
<?php /*** Created by PhpStorm.* User: John* Date: 2019/4/3* Time: 13:19*/use Workerman\Worker;require __DIR__.'/../Workerman-framework/Autoloader.php';// 當(dāng)客戶端連上來時分配uid,并保存連接,并通知所有客戶端 function handle_connection($connection) {}// 當(dāng)客戶端發(fā)送消息過來時,轉(zhuǎn)發(fā)給所有人 function handle_message($connection, $data) {global $text_worker;foreach($text_worker->connections as $conn){$conn->send($data);} }// 當(dāng)客戶端斷開時,廣播給所有客戶端 function handle_close($connection) {}// 創(chuàng)建一個文本協(xié)議的Worker監(jiān)聽2347接口 $text_worker = new Worker("websocket://0.0.0.0:2347");// 只啟動1個進程,這樣方便客戶端之間傳輸數(shù)據(jù) $text_worker->count = 1;$text_worker->onConnect = 'handle_connection'; $text_worker->onMessage = 'handle_message'; $text_worker->onClose = 'handle_close';Worker::runAll(); 復(fù)制代碼前端代碼如下
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Title</title> </head> <body> <div style="margin: 0 auto;width: 800px"><h2>聊天室</h2><textarea type="text" style="border: 1px solid black;width: 800px;height: 200px;" id="his"></textarea><input type="text" style="width:740px" id="sendMsg"> <button id="send">發(fā)送</button> </div> </body> </html> <script src="http://code.jquery.com/jquery-latest.js"></script> <script>$(function () {var ws = new WebSocket("ws://127.0.0.1:2347");var storage = window.localStorage;if(!storage.getItem('name')){var name=prompt("請輸入您的名字","");storage.setItem('name',name);}$('#send').click(function () {msg = $('#sendMsg').val();$('#sendMsg').val('');ws.send(storage.getItem('name')+':'+msg);});ws.onopen = function() {$('#his').append("服務(wù)器連接成功.....");$('#his').append("\n");};ws.onmessage = function(e) {$('#his').append(e.data);$('#his').append("\n");};}); </script> 復(fù)制代碼咱們這里使用了websocket協(xié)議,打開頁面即建立一個連接;
解釋下php代碼
onConnet就是連接時完成三次握手時,執(zhí)行的觸發(fā)動作;$connection是連接對象;
onMessage是當(dāng)客戶端通過連接發(fā)來數(shù)據(jù)時(Workerman收到數(shù)據(jù)時)觸發(fā)的回調(diào)函數(shù);data是對應(yīng)協(xié)議decode(解碼)了的數(shù)據(jù);$connection是連接對象
onClose當(dāng)客戶端連接與Workerman斷開時觸發(fā)的回調(diào)函數(shù)。不管連接是如何斷開的,只要斷開就會觸發(fā)onClose。每個連接只會觸發(fā)一次onClose(注意:這里的斷開指的是關(guān)閉瀏覽器,不是斷網(wǎng);斷網(wǎng)的話需要做心跳檢測來判斷)
代碼傳送門(github.com/BoHongtao/W…)
示例demo(github.com/BoHongtao/W…)
轉(zhuǎn)載于:https://juejin.im/post/5caae542e51d452b084af4b4
總結(jié)
以上是生活随笔為你收集整理的workerman实现聊天室的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 苏宁易购高鑫跑步进场,“即时零售”或成疫
- 下一篇: Fw:[一恒茶社] 作为大学教师,我 感