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

时间:2014-09-03 14:19:51

标签: php node.js laravel express socket.io

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

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

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

我想知道是否可以将它与Laravel集成,因此我仍然可以使用我的laravel登录,会话,URL路由等。

1 个答案:

答案 0 :(得分:3)

您可以使用下一个解决方案。我在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查询并在正确的用户ID客户端中发出事件。您可以为此创建名为$ userid的房间。

6。通过file_get_contents或curl。

从PHP发送命令到node.js服务器

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

一个房间 - 一个客户。断开连接,房间删除,但现在socket.io中有一个错误,房间不删除,所以我在代码中手动删除。

7。所以,地址可能是下一个:你的节点js-server / emit?id = a98166839163afd20a4be56fa3e60d13&amp; message = server_event&amp; param = 12

另外,更好地使用curl和PHP数据。因此,在PHP中的所有业务逻辑中,您不使用数据存储或在node.js部分中进行计算,您也可以将一个node.js服务器用于多个项目。并且您可以使用Laravel登录,会话,无论您想要什么。此外,您可以在PHP部件中添加userid_to_user多对多存储,以便为多个客户端提供服务,并以帐户登录。

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

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

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