在PHP web应用程序上创建nodejs聊天


create nodejs chat on php web application

我听说nodejs是创建实时聊天应用程序的最佳选择。所以我决定试一试。

//on server side
//create nodejs server
var http = require('http');
var chatApp = http.createServer(function (request, response) {
    //create an html chat form listened by this nodejs server
    response.writeHead(200, {'Content-Type': 'text/html'});
    response.write('<script src="http://localhost/nodejs/app/socket.io.js"></script><script src="http://localhost/nodejs/app/chat.client.js"></script><input type="text" id="message_input"><div id="chatlog"></div>');
    response.end();
}).listen(8000);
//create websocket protocol via socket.io
var io = require('socket.io').listen(chatApp);
//send data to client
io.sockets.on('connection', function(socket) {
    socket.on('message_to_server', function(data) {
        io.sockets.emit("message_to_client",{ message: data["message"] });
    });
});
//on client side
//get data from server response
var socketio = io.connect();
socketio.on("message_to_client", function(data) {
    document.getElementById("chatlog").innerHTML = ("<hr/>" +
    data['message'] + document.getElementById("chatlog").innerHTML);
});
//submit and send data to server via enter key
document.onkeydown = function(e){
    var keyCode = (window.event) ? e.which : e.keyCode;
    if(keyCode == 13){
        var msg = document.getElementById("message_input").value;
        socketio.emit("message_to_server", { message : msg});
        document.getElementById("message_input").value = '';
    }
};

一切似乎都很好,但php web应用程序集成。我怎么能使它的工作作为一个php网页的一部分?

正如我在原来的评论中提到的,你可以让你的PHP应用程序继续做它一直在做的事情,只是使用NodeJS来处理web套接字连接(通过socket.io)库。下面是一个可以使用的简化结构的例子:

您的chat.php页面或Chat控制器:

<?php
// Handle /chat route
// Perform any authentication with your database
// Render template
?>
<!-- The following HTML is rendered -->
<html>
  <head>
    ...
    <script src="http://localhost/nodejs/app/socket.io.js"></script>
    <script src="http://localhost/nodejs/app/chat.client.js"></script>
  </head>
  <body>
    ...
    <input type="text" id="message_input">
    <div id="chatlog"></div>
    ...
    <script>
    var socketio = io.connect('http://localhost:8080');
    socketio.on("message_to_client", function(data) {
        document.getElementById("chatlog").innerHTML = ("<hr/>" +
        data['message'] + document.getElementById("chatlog").innerHTML);
    });
    //submit and send data to server via enter key
    document.onkeydown = function(e){
        var keyCode = (window.event) ? e.which : e.keyCode;
        if(keyCode == 13){
            var msg = document.getElementById("message_input").value;
            socketio.emit("message_to_server", { message : msg});
            document.getElementById("message_input").value = '';
        }
    };
    </script>
  </body>
</html>

你的NodeJS应用程序看起来像下面这样。注意,缺少常规的HTTP连接处理,我们现在让PHP处理:

//create websocket protocol via socket.io
var io = require('socket.io').listen(8080);
//send data to client
io.sockets.on('connection', function(socket) {
  socket.on('message_to_server', function(data) {
    io.sockets.emit("message_to_client",{ message: data["message"] });
  });
});

这就是你要用的碱。正如我之前在评论中提到的,可以扩展它,将数据库支持的身份验证机制添加到服务器的NodeJS部分。