Pusher入门:使用状态通道
在本系列中,我們一直在學習Pusher中的Channels ,該平臺可讓您為用戶提供所需的無縫實時體驗。
存在通道建立在專用通道提供的安全性的基礎上,但是它們增加了知道哪些用戶已訂閱并連接到該通道的好處。 最好的部分是實現和使用狀態通道的容易程度,如果您已經將應用程序配置為使用私有通道,則更加容易。 您將在本文中學習如何使用在線渠道。
更好的聊天應用
我們的聊天應用程序當前使用專用通道,以促進即時的客戶端/服務器通信。 因此,配置我們的應用程序以使用狀態通道將非常容易。 讓我們從服務器應用程序開始。
修改服務器
為了使用專用通道,我們配置了一個端點以確保用戶已通過我們的應用程序進行身份驗證。 該端點執行ChannelsController的authorizeUser()方法,并調用Pusher庫的socket_auth()方法來幫助驗證用戶身份。 為了使用狀態通道,我們需要更改authorizeUser()來調用Pusher庫的presence_auth()方法,如下所示:
public function authorizeUser(Request $request) {if (!Auth::check()) {return new Response('Forbidden', 403);}$presenceData = ['name' => Auth::user()->name];echo $this->pusher->presence_auth($request->input('channel_name'), $request->input('socket_id'),Auth::user()->id,$presenceData);}但是方法名稱的更改只是第一次修改。 我們還必須為presence_auth()提供用戶的唯一標識符,以及我們要提供的有關用戶的任何其他信息。 上面的代碼將這些額外的用戶數據存儲在$presenceData變量中,并將其作為最終參數傳遞給presence_auth() 。
另外,我們必須修改sendMessage()方法。 第一個更改是通道名稱。 就像所有其他名稱一樣,我們必須在頻道名稱前添加前綴以表示我們要使用的頻道類型: presence-在這種情況下,如以下代碼所示。
$this->pusher->trigger('presence-chat', 'send-message', $data);我們還可以修改隨事件發送的數據,而不是提供引發事件的用戶名,而是可以包含用戶ID。
$data['user'] = Auth::user()->id;因為我們將使用在線狀態通道,所以我們可以從客戶端中查找用戶名,這一小的更改將減少通過網絡傳遞的數據量。
更換客戶
客戶端的channel對象包含我們需要使用已訂閱頻道的所有內容,并且查詢用戶數據也不例外。 我們的channel對象具有一個稱為members的屬性,我們可以使用該屬性來檢索特定用戶的信息。 我們將在send-message事件處理程序中使用此對象,如下所示:
this.channel.bind('send-message', (data) => {let user = this.channel.members.get(data.user);this.messages.push({message: data.message,user: user.info.name});});在這里,我們調用this.channels.members.get()并傳遞用戶ID(請記住,我們的服務器應用程序現在提供ID而不是名稱)。 此方法返回一個具有info屬性的對象,并且此info對象包含我們在服務器上的authorizeUser()方法的$presenceData變量中提供的所有其他信息。 因此,在上面的代碼中,我們使用user.info.name檢索用戶的名稱。
我們還可以修改trigger()方法以包括有關發起客戶端警報事件的用戶的信息。 要檢索當前登錄用戶的成員數據,請使用me屬性,如以下代碼所示:
trigger(eventName, message) {this.channel.trigger(eventName, {message,user: this.channel.members.me});}在此代碼中,我們向事件有效負載添加了一個user屬性,并將其設置為已登錄用戶的用戶對象。 這意味著我們可以修改client-send-alarm事件處理程序,以在警報消息中包含用戶名,如下所示:
this.channel.bind('client-send-alarm', (data) => alert(`${data.user.info.name}: ${data.message}`));在這里,我們使用data.user.info.name來訪問用戶名,以便我們看到哪個用戶發送了警報,如下所示:
結論
使用狀態通道不僅為您的應用程序提供了匿名通道的更高的安全性,而且還使您能夠查詢用戶數據以獲取訂閱該通道的用戶。 借助Pusher的Channels ,可以非常輕松地為您的應用添加安全,實時且功能豐富的通信。
翻譯自: https://code.tutsplus.com/tutorials/get-started-with-pusher-using-presence-channels--cms-31448
總結
以上是生活随笔為你收集整理的Pusher入门:使用状态通道的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Excel计算累加
- 下一篇: day29 HTML基础