前端事件觸發(fā):
socket.send('getInfoaaaa',uid);
socket.on('getInfoaaaReturn', function(msg){
alert(msg);
});
服務(wù)端事件:
$socket->on('getInfoaaaa',function($uid)use($socket){
$socket-> emit('getInfoaaaReturn',$uid);
});
開啟服務(wù)端監(jiān)聽之后 前端沒有收到結(jié)果,也沒有任務(wù)的報錯,之前寫的都是可以的,不知道為啥。。。求大神指教。
前端:
uid = 1022905503;
// 連接服務(wù)端
var socket = io('https://dzpk.752g.com:2120');
// 連接后登錄
socket.on('connect', function(){
socket.emit('login', uid);
});
//以上為socket.io 連接代碼 不可省略
//*************************************************************************//
// 后端推送來消息時
socket.on('new_msg', function(msg){
$('#content').html('收到消息:'+msg);
$('.notification.sticky').notify();
});
// 后端推送來在線數(shù)據(jù)時
socket.on('update_online_count', function(online_stat){
$('#online_box').html(online_stat);
});
socket.emit('getInfoaaaa',uid);
socket.on('getInfoaaaReturn', function(msg){
alert(msg);
});
服務(wù)端:
$sender_io->on('connection', function($socket){
// 當客戶端發(fā)來登錄事件時觸發(fā)
$socket->on('login', function ($uid)use($socket){
global $uidConnectionMap, $last_online_count, $last_online_page_count;
// 已經(jīng)登錄過了
if(isset($socket->uid)){
return;
}
// 更新對應(yīng)uid的在線數(shù)據(jù)
$uid = (string)$uid;
if(!isset($uidConnectionMap))
{
$uidConnectionMap = 0;
}
// 這個uid有++$uidConnectionMap個socket連接
++$uidConnectionMap;
// 將這個連接加入到uid分組,方便針對uid推送數(shù)據(jù)
$socket->join($uid);
$socket->uid = $uid;
// 更新這個socket對應(yīng)頁面的在線數(shù)據(jù) 用來測試是否連接成功
$socket->emit('update_online_count', "當前<b>{$last_online_count}</b>人在線,共打開<b>{$last_online_page_count}</b>個頁面");
});
//客戶端請求打打主播的牌面信息
$socket->on('getInfoaaaa',function($uid)use($socket){
$socket-> emit('getInfoaaaReturn',$uid);
});
// 當客戶端斷開連接是觸發(fā)(一般是關(guān)閉網(wǎng)頁或者跳轉(zhuǎn)刷新導(dǎo)致)
$socket->on('disconnect', function () use($socket) {
if(!isset($socket->uid))
{
return;
}
global $uidConnectionMap, $sender_io;
// 將uid的在線socket數(shù)減一
if(--$uidConnectionMap <= 0)
{
unset($uidConnectionMap);
}
});
});
里面還有其他的事件,結(jié)構(gòu)是 附件那樣子的,可以正常使用,但是上面的那個不著調(diào)為什么就不能用。。
客戶端與服務(wù)端鏈接建立成功前無法給服務(wù)端emit事件,客戶端與服務(wù)端建立鏈接成功后會觸發(fā)connect事件,在connect事件觸發(fā)后才能emit。
socket.emit('getInfoaaaa',uid);
執(zhí)行的時候并沒觸發(fā)connect事件,也就是說這時候與服務(wù)端還沒建立鏈接,服務(wù)端當然收不到任何數(shù)據(jù)。
socket.on('connect', function(){
socket.emit('login', uid);
});
你可以參考上面官網(wǎng)demo源碼向服務(wù)端emit login事件部分寫法,寫在connect事件的里面,也就是connect事件觸發(fā)后執(zhí)行emit才行。
但如果寫到connect事件里面,當連接服務(wù)端成功的時候就直接觸發(fā)了啊,但 我需要用戶的行為操作去觸發(fā)這個事件,我也有像附件中那樣寫的五個事件,可以正常使用,
那如果我之前的寫法是錯誤的,我需要用戶操作觸發(fā)事件時,這個怎么寫?