有可能在Laravel中集成socket.io客户端吗


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

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

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

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

我想知道是否有可能将其与Laravel集成,这样我仍然可以使用我的Laravel登录、会话、URL路由等。

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

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

2.在PHP中创建userid(我使用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.所以,地址可能是下一个:你的nodejs-server/eemit?id=a98166839163afd20a4be56fa3e60d13&message=server_event&参数=12

此外,在PHP数据中更好地使用curl。因此,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。

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

  • http://elephant.io/#usage
  • https://github.com/jdutheil/nodePHP/blob/master/index.php
  • http://webandphp.com/IntegratingNode.jswithPHP