允许两个客户端在没有服务器的情况下交互
Posted
技术标签:
【中文标题】允许两个客户端在没有服务器的情况下交互【英文标题】:Allow two clients interact without server 【发布时间】:2013-03-21 15:16:04 【问题描述】:是否可以让两个客户端在没有服务器的情况下直接交互?
我指的是网站,例如,是否可以在同一网站上的两个客户端之间创建聊天,仅在客户端使用 javascript
。
如果不是,在网站上的活跃客户端之间进行聊天的最低服务器端是多少? (例如:一个php
文件并且没有数据库)?
我的想法:
在每个客户端上使用localStorage
可以轻松存储对话,问题是如何将一些数据从client1
发送到client2
,而不在数据库中存储任何内容(或最多该消息)。另外,请注意“过去”的对话不应该可见,因此不需要存储空间。
请注意,我不想要任何 nodeJS 或 websocket 解决方案,我想要尽可能简单的东西。那么,在线用户之间聊天的最低code
和files
是多少?
【问题讨论】:
是的。向每个参与者提供其他参与者的电话号码? ;-) 虽然我对答案很感兴趣,但我很认真地 +1。 @JamieHutber 我猜 OP 是在询问是否可以在浏览器内的 JavaScript 中设置一个侦听器(大概服务器会以某种方式告知每个客户端其他客户端的详细信息,然后将其留给客户端)。您的评论表明这是不可能的。 @Cristy 这篇文章看起来非常相关,尽管我认为这篇文章的简短回答仍然是“不,至少现在不是不诉诸其他技术”。 ***.com/questions/7022383/… 也许可以看看 webRTC 项目? webrtc.org @Cristy 将服务器端的东西卸载到第 3 方怎么样?例如mibbit.com 等? (我没有使用过这些,因此无法评论它们的有用性或适当性)。 【参考方案1】: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 服务器。将所有客户端的东西放在静态文件夹中,就可以开始了。
【讨论】:
【参考方案2】:html5 有了新的Web Sockets feature
这样,服务器干预几乎无效..服务器和客户端通过新协议进行通信
ws - Web Sockets 协议 wss - Web Sockets 安全协议(类似于 https)Live demo
【讨论】:
我知道,但我想要一些可以在任何服务器上运行的最小实现,但主要是在服务器上使用PHP
。 WebSockets 很难为 PHP 设置。
Web Sockets 仍然需要服务器。它只允许客户端和服务器之间的持久连接。这与 C2C 无关。【参考方案3】:
不,这是不可能的。如果你想要一个聊天框,你必须将数据存储在服务器中。连接客户端的东西,比如向每个客户端显示聊天文本和相同的东西,它们来自服务器。所以不可能那样做。好吧,即使是免费的聊天框也将每个站点的数据放在他们的服务器中。
至于您使用localStorage
的想法,也许是可能的(但仍然使用新的WebSocket 协议),但它在时间维度上不起作用,对吧?如果其他用户加入,他们将看不到之前发送的内容。
【讨论】:
至少,我如何将文本行从客户端 A 发送到客户端 B,而不在服务器上存储任何数据? 我在我的问题中说我不想要任何历史记录,只是让在线用户互动。以上是关于允许两个客户端在没有服务器的情况下交互的主要内容,如果未能解决你的问题,请参考以下文章
允许在没有Active Directory信任的情况下进行winhttp委派
GMail Chat 如何能够在没有客户端交互的情况下发出 AJAX 请求?
如何允许客户端在不更改应用代码的情况下更改 iOS 应用中的 API 基本 URL?