我正在尝试使用AppWeb开源Web服务器开发交互式聊天应用程序 我需要有一些机制,使Web服务器能够向客户端发送更新的消息,这样当远程用户发送将在客户端自动更新的消息时。
使用HTML5 Web套接字和服务器发送事件有一些方法可以做到这一点 但我们需要在HTML和JavaScript中实现它而不是HTML5。
因此,我需要一些池化机制,以便将我的Web服务器汇集到新事件中。
那么我应该如何使用套接字在Javascript中编写池化机制 如何在服务器端实现?
谢谢!
答案 0 :(得分:2)
已经有一些例子......根据服务器端的不同,您可以选择java-hello-world或php-hello-world或......
如果您不能使用websocket,必须可以采用旧方式,通过window.setInterval
创建间隔,并从服务器中提取数据,例如。 $.ajax()
。 我不知道双向连接的任何其他替代方法(websocket)...... 见kayahrs answer
正如你所要求的那样:
$.ajax()
jQuery xhr方式{{3}}。基本上,它向服务器发出一个异步请求,它返回xml或json或text或......(无论如何)。当此请求返回时,受支持的eventHandler会被触发,您可以对响应做出反应。你也可以使用普通的xhr,但处理原始的xhr有点尴尬
jQuery支持$.ajax()
的一些速记重载,例如。 $.getJSON()
,$.get()
,...
示例实施:
$.get("test.cgi", function(data){
alert("Data Loaded: " + data);
});
答案 1 :(得分:1)
还有另一种技术可以将消息从服务器发送到客户端。您必须使用iframe连接到PHP脚本(或者您在服务器端使用的任何技术),它不会关闭连接。然后,每当客户端必须被告知某事时,PHP脚本就会发送JavaScript消息。在每条消息之后,服务器刷新输出流以强制数据确实找到通往客户端的路径并且不被某些输出缓冲区高速缓存。以下是iframe中加载的PHP脚本的一个小示例代码(未经测试且未完整,只是为了显示基础知识):
<html>
<body>
<script type="text/javascript">
function receiveMsg(data)
{
// Do something with the data, for example send it to some function
// in the parent frame (Where your chat application lives)
}
<?php
while (true) // You may also implement some abort state which should
// be checked here
{
$data = waitForData(); // This is your magic function on the server
// which waits for data to be send to the client
echo "receiveMsg('" . $data . "');"; // Let's say data is just a string.
// You may want to use JSON instead
flush();
}
?>
</script>
</body>
</html>
这种方法的优点是它不依赖于轮询。因此,您不必每隔x秒向服务器发送一次请求。当你在服务器端做正确的事情时,其他用户尽可能快地接收一个用户发送的消息,而不是x秒之后。缺点是您为每个聊天用户提供了永久的HTTP连接。但是,这可能需要更少的资源在服务器上,然后每个聊天用户每分钟有几十个完整的HTTP请求。