繁体   English   中英

是否可以在Laravel中集成socket.io客户端?

[英]Is it possible to integrate socket.io client in Laravel?

我有一个外部应用程序,它将使用套接字(使用zeromq )连接到我的网站。

这些套接字将在node.js (express.js)中接收并通过socket.io发送给客户端。

使用socket.io的目的仅仅是实时更新每个客户端浏览器上的一些信息。 就像简单的通知一样。 没有网络套接字将从浏览器传输到服务器。 浏览器将仅使用websockets从服务器接收信息。

我想知道是否可以将其与Laravel集成在一起,以便我仍然可以使用laravel登录名,会话,URL路由等。

您可以使用下一个解决方案。 我在PHP + socket.io连接中使用它。 这不是完全集成,但是您可能会从PHP代码向连接的客户端发出事件。

1.连接到客户端中的socket.io。

2.在PHP中创建用户ID(我使用md5(session_id()))。 将此ID保存在所需的位置,例如,在用户帐户表中。

3.在客户端运行下一个代码:

<script>
var socket = io("' . $your_socket_io_server . '");
socket.emit("register", { userid: "' .  $userid  . '" });
</script>

4.监听客户端上的事件

<script>
    //Additional room, not inly user id.  
    socket.emit("register", { userid: "room_26322bab71bc91b19204acfeee6192" })
    socket.on('server_event', function (data) {
        console.log('server event');
        console.log(data);
    })

    socket.on('alert', function (data) {
        alert(data);
    })
</script>

5.编写一些node.js代码,它们侦听GET和POST查询并在正确的userid客户端中发出事件。 您可以为此创建一个名为$ userid的房间。

6.通过file_get_contents或curl将命令从PHP发送到node.js服务器。

例如,我的代码: https : //github.com/ramainen/doit-socket/blob/master/server.js

一间房间-一位客户。 断开连接后,删除房间,但是socket.io中存在一个错误,并且房间没有删除,因此我在代码中手动删除了。

7.因此,地址可能是下一个:your-nodejs-server / emit?id = a98166839163afd20a4be56fa3e60d13&message = server_event&param = 12

另外,最好将curl与PHP数据结合使用。 因此,PHP中的所有业务逻辑都无需在node.js部分中使用数据存储或计算,也可以将一台node.js服务器用于多个项目。 您可以使用Laravel登录名,会话,无论您想要什么。 另外,您可以在PHP部分中使用userid_to_user多对多存储来为多个客户端提供服务,并以帐户身份登录。

您可以使用adress cloud.doit-cms.ru进行测试,这是Azure node.js应用程序,连接到github代码https://github.com/ramainen/doit-socket

我的用于发布的PHP代码(非常简单): https : //github.com/ramainen/doit-cms/blob/master/cms/mod_socketio/socketio.class.php 当然,外部应用程序(如果不是PHP)必须使用此简单API。

另外,您可以使用第三方解决方案,如下所示:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM