允许两个客户端之间在无服务器情况下进行交互

7

是否有可能让两个客户端直接进行交互而不需要服务器的参与?

我指的是网站,例如,是否可以使用客户端 javascript 在同一网站上创建两个客户端之间的聊天。

如果不行,那么在网站活跃用户之间建立聊天所需的最小服务器端是什么?(例如:一个PHP文件和无数据库)?

我的想法: 使用每个客户端上的localStorage轻松存储对话,问题在于如何将来自client1的一些数据发送到client2,而不存储任何东西(或至多存储该消息)在数据库中。另外,请注意,“过去”的对话不应该可见,因此不需要存储。

请注意,我不想要任何nodeJS或websocket解决方案,我希望尽可能简单。那么,在在线用户之间建立聊天所需的最少代码文件是什么?


1
是的。把每个参与者的电话号码都提供给对方?;-) 说真的,我很感兴趣答案。 - Sepster
2
@Cristy 这篇帖子看起来非常相关,尽管我认为短期内的答案仍然是“不行,至少现在还需要借助其他技术”。https://dev59.com/DWw05IYBdhLWcg3wy052 - Sepster
2
也许可以看一下 WebRTC 项目?http://www.webrtc.org/ - Christophe
@Cristy 如果没有其他更好的选择,我建议考虑实现一些 AJAX 功能,让每个客户端定期向服务器轮询以获取来自另一个客户端的更新。 - Sepster
1
@Cristy,把服务器端的东西卸载到第三方,例如http://www.mibbit.com/等怎么样?(我没有使用过这些,无法评论它们的有用性或适当性)。 - Sepster
显示剩余7条评论
3个回答

3

WebRTC API可以让JavaScript发起直接的浏览器对浏览器连接,但仍需要服务器提供页面和协调会话启动。

这些API仍在快速发展中,并且只能在最新版本的浏览器中使用,因此尚未准备好进行真正的生产使用。

然而,老实说,对于您要做的事情,最简单的选择是Node和socket.io:

var http=require('http'), express=require('express'), sio = require('socket.io')
    , app=express(), srv = http.createServer(app);

app.use(express.static(__dirname+'/static'));

sio.listen(srv);
srv.listen(80);

现在你已经有了一个只需5行代码就可以工作的WebSockets服务器。将所有客户端相关的东西放在静态文件夹中,你就可以开始使用了。


0

不,这是不可能的。如果你想要一个聊天框,你必须将数据存储在服务器上。而连接客户端的东西,比如显示聊天文本和同样的东西给每个客户端,都来自服务器。所以这是不可能的。即使是免费的聊天框也会将每个站点的数据放在他们的服务器上。

至于你使用localStorage的想法,也许是可能的(但仍然需要使用新的WebSocket协议),但它在时间维度上不起作用,对吧?如果另一个用户加入,他们看不到之前发送的内容。


那么,我如何在不在服务器上存储任何数据的情况下将文本行从客户端A发送到客户端B呢? - XCS
我在我的问题中说过,我不想要任何历史记录,只是让在线用户进行交互。 - XCS

0

HTML5有一个新的Web Sockets功能

通过这个功能,服务器的干预几乎被消除了。服务器和客户端通过新协议进行通信

  • ws - Web Sockets协议
  • wss - Web Sockets安全协议(类似于https)

实时演示


我知道,但我想要一些最小的实现,可以在任何服务器上运行,但大多数情况下是在服务器上使用PHP。对于PHP来说,设置WebSockets相当困难。 - XCS
Web Sockets仍然需要一个服务器。它只允许客户端和服务器之间建立持久连接。这与C2C无关。 - Jodes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接