我有一个外部应用程序,它将使用套接字(使用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