做过ICQ或CHAT ROOM的请进。

xxmm 2001-08-25 12:54:01
我想搞知道ICQ或是CHATROOM是如何工作的。
如果客户用的是APPLET而不是下载的CHAT或是ICQ软件,那么这个APPLET会与一个SERVLET传递信息。如果个系统在不同的国家有不同的一个SERVER,为了简单化,每个SERVER上只有一个SERVLET负责与APPLET互相传递信息。问题是,当中国的SERVLET收到一个APPLET请求与英国的朋友交换信息。我不可能让两个APPLET之间用SOCKET,而是让它们通过SERVLET,这两个SERVLET如何交互?
谢谢!


...全文
399 点赞 收藏 17
写回复
17 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
violetrose 2001-08-31
my mail:huang@echinagro.com
回复
xxmm 2001-08-30
Hi, Could you please leave your email?
回复
violetrose 2001-08-29
single thread 和multi thread没有区别啊,能不能找到request的source是不用你自己考虑的,socket自己会做的。

你自己试验一下不就行了,假如servletA是做加法的,接收两个参数a,b,返回a+b:
public class ServletA extends HttpServlet
{
...
public void service(HttpServletRequest req,HttpServletresponse res)
{
try{
int a = Integer.parseInt(req.getParameter("a"));
int b = Integer.parseInt(req.getParameter("b"));
res.getWriter.println(a+b);
}catch(Exception e){}
}
...
}


你在servletB中打开一个指向servletA的URLConnection看看结果不就行了?
public class ServletB extends HttpServlet{
....
public void service(HttpServletRequest request,HttpServletResponse response)
{
...
HttpURLConnection httpCon = new HttpURLConnection(new URL("http://server.uk/servletA?a=10&b=20"));
....
}
}

自己试试不就知道了?
回复
xxmm 2001-08-29
violetrose?
我还是不清楚,URLCONNECTION是否能够判断得出是哪一个线程发出的REQUEST并且准确无误的返回给SERVLET的这个线程一个RESPONSE。如果是SINGLE THREADED,我还凑合能想得通,但是如果是线程的话,URLCONNECTION仍旧能够找到发出REQUEST的SOURCE并将它作为RESPONSE的DESTINATION发回吗?
谢谢。帮我弄清楚我一定给分。
回复
xxmm 2001-08-29
single threaded model里有多个SERVLET的INSTANCE,multithreaded里只有一个SERVLET的INSTANCE。URLconnection足以判明是一个OBJECT里的哪一个THREAD在和它通信,是这样吗?

我的信箱:bugaoxing@263.net
回复
xxmm 2001-08-29
很想一试。:)
能跟我合作做这个试验么?我只有一个SERVER。
回复
xxmm 2001-08-28
问题是如果RESPONSE回给用户以后,用户就继续开始下面的操作,而绝不会等待SERVLET去打开另一个SOCKET(是否能在SERVER 端打开另一个SOCKET,有谁作过这样的试验?因为我只有一个SERVER,谁有兴趣我们可以合作试一下这种分布式开发???),然后再继续下一部处理。

比方说,我发出一个1,等待的是另一个SERVER上的用户看到1后回复一个1,如果这样做,OK,即使我可以打开另外一个SOCKET(我怀疑),等我接受到返回来的RESPONSE以后,我会作为一个新的REQUEST重新开启一个线程的。不是这样吗?

我不能确定,希望大家帮助。我现在首先想知道,有谁做过,知道一种确实可行的解决方式。
回复
violetrose 2001-08-28
public void service(HttpServletRequest request,HttpServletResponse response)
{
request.getParameter();...response.write();...|| forward()...// 返回html页面之类的操作

HttpURLConnection httpCon = new HttpURLConnection(new URL("http://server.uk/yourservlet"));
....
}
回复
xxmm 2001-08-27
很好。
我有一个问题,SERVLET是不可能打开一个SOCKET与另外一个SERVLET通话的对吧?
你的方案是让我另建一个SERVER端的OBJECT,用来当作另一个SERVLET的客户端进行通话是这样的吗?
换一句话也就是,两个在不同地区的SERVLET之间是绝不可能直接通信的,是这样吗?

请回复。
回复
violetrose 2001-08-27
那个静态类或许可以这么写:
public static class DataSycUtil{
static Socket socket;
static OutputStream os;
static ServerSocket serverSocket;//如果有多个服务器的化,换用数组
static
{
try
{
socket = new Socket("remoteHost",yourPort);

}
catch (SocketException se)
{
serverSocket = new ServerSocket(yourPort);
socket = serverSocket.accept();
}
os = socket.getOututStream();
}

public static int synchronize()
{
os.write();//或者用ObjectOutputStream再包装一下
}
}

注意,这只是说明,而不是代码。供参考
回复
violetrose 2001-08-27
只用servlet来做服务器的话,或许只有通过http的方式(普通的或是soap等)才比较现实。
即使这样的话,servlet之间也一样可以通过http来交换信息。在需要同步信息的时候实例化一个HttpURLConnection连接到异地的服务器不就行了?不过如果异地之间频繁的交换数据,而每次数据量又不是很大,反复的实例化HttpURLConnection肯定挺费的;倒不如写一个静态类,在服务器间建立不关闭的socket,负责数据的同步。
回复
xxmm 2001-08-27
SERVLET用HTTP与客户端进行通信是由SERVLET ENGINE完全管理的,我不知道SERVLET可以自己打开一个URLCONNECTION到另外一个SERVLET上,如何做?当客户端接收到一个HTTPREQUEST,开始这个线程,然后呢?请给段简单代码示例。
(事实上到了今天,我认为这样两个SERVLET是没有办法通信的)但是我希望有人有过这样的经验或是看到过这样的示例。
回复
violetrose 2001-08-27
实际上HttpURLConnection也是打开一个连接到远程服务器的80端口的socket连接,呵呵

Java中,两台机器通过socket建立tcp的连接,是其中一台先初始化一个ServerSocket进行监听,被动的等待另一台来建立连接。所以假如不利用web端口,我们就需要自己在中国机器的servlet线程里初始化一个ServerSocket,并且在另一个时候在英国的机器的servlet线程里来连接,这看来在servlet线程短暂的生命期里不是很现实,是不是?

其实也不是不可以。其实只要让服务器端的某一个servlet线程(即创建ServerSocket的那个)生命期无限长,就一切都可以解决。用一个while(true){}不就行了?嘿嘿

>>两个在不同地区的SERVLET之间是绝不可能直接通信的,是这样吗?

不是很明白你的意思,具体指什么?

回复
violetrose 2001-08-26
在servlet之间建立一个socket连接不就行了。
反正就是你的server(不管是application还是servlet)开一个数据同步的线程,负责各地的服务器之间的数据的同步就是了。
数据传输(server2server,server2client,client2server)其实也不一定用普通的http,可以考虑用soap,或是自己开个socket直接传对象不也可以?
回复
xxmm 2001-08-26
首先我想不通SERVLET不用HTTP该如何传输数据。
你能不能给一小段代码,让SERVLET1传给SERVLET2一个int类型的数据1。
SERVLET2的地址假设是100.100.100.0:8080
回复
xxmm 2001-08-26
不同服务器上的两个SERVLET之间如何用SOCKET???
回复
xxmm 2001-08-25
Somebody gotta help me.
回复
相关推荐
发帖
Web 开发
创建于2007-09-28

8.0w+

社区成员

Java Web 开发
申请成为版主
帖子事件
创建了帖子
2001-08-25 12:54
社区公告
暂无公告