1、做實時消息推送的方式大概有前端輪詢、長連接等方式,前端輪詢的話對服務器壓力會很大,所以采用長連接的方式
2、安裝啟動workerman,下載地址https://www.workerman.net/download/web-msg-sender.zip,啟動:linux系統cd到到框架目錄里運行php start.php start -d
。windows系統進入到框架目錄里雙擊start_for_win.bat文件啟動。
3、啟動成功后在瀏覽器輸入http://localhost:2123/可以看到一個demo界面
4、再在瀏覽器地址上輸入http://localhost:2121?type=publish&to=1604023861000&content=你在干嘛,向uid為1604023861000發送“你在干嘛”的消息,
前端代碼:
<script src=
'http://cdn.bootcss.com/socket.io/1.3.7/socket.io.js'
></script>
<script>
// 連接服務端,workerman.net:2120換成實際部署web-msg-sender服務的域名或者ip
var
socket = io(
'http://workerman.net:2120'
);
// uid可以是自己網站的用戶id,以便針對uid推送以及統計在線人數
uid = 123;
// socket連接后以uid登錄
socket.
on
(
'connect'
, function(){
socket.emit(
'login'
, uid);
});
// 后端推送來消息時
socket.
on
(
'new_msg'
, function(msg){
console.log(
"收到消息:"
+msg);
});
// 后端推送來在線數據時
socket.
on
(
'update_online_count'
, function(online_stat){
console.log(online_stat);
});
</script>
后端代碼
<?php // 指明給誰推送,為空表示向所有在線用戶推送 $to_uid = ""; // 推送的url地址,使用自己的服務器地址 $push_api_url = "http://workerman.net:2121/"; $post_data = array( "type" => "publish", "content" => "這個是推送的測試數據", "to" => $to_uid, ); $ch = curl_init (); curl_setopt ( $ch, CURLOPT_URL, $push_api_url ); curl_setopt ( $ch, CURLOPT_POST, 1 ); curl_setopt ( $ch, CURLOPT_HEADER, 0 ); curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 ); curl_setopt ( $ch, CURLOPT_POSTFIELDS, $post_data ); curl_setopt ($ch, CURLOPT_HTTPHEADER, array("Expect:")); $return = curl_exec ( $ch ); curl_close ( $ch ); var_export($return);