4个回答
展开全部
可以,在JSP或Servlet写Socket连接代码就可以,不过不建议这么做。如果控制不好很可能连累应用的稳定性。不知道是什么应用场景,感觉不应该这么设计。
追问
项目中需要和其他的服务器保持长连接的通信,有什么好的建议不?使用JNI调用C++的dll吗
追答
用以下方法可以较好的解决Socket性能和对Web应用的影响:
1、试试nio包吧SocketChanel,效率高一些,也不容易在高并发情况下影响稳定性,不过nio是基于缓存的,容易造成数据包异常,要做一些处理。
2、在web应用外面独立编写一个Socket应用,web通过和这个应用通讯完成原来写在页面的通讯代码,这样不容易因为网络问题造成意外影响。
3、如果如你所说,是一个不断的长连接,可以在tomcat或应用启动的时候就建立一些连接,并定期检查连接状态,或定期重新连接,周期不要太短。web中所有的socket通讯都由这个连接完成。
当然如果结合使用效果最好。
你说的方法和第二种方案是一个思路,但是有个问题,就是依赖本地代码,如果跨平台移植会麻烦些,但是也是个好的解决方案,如果写DLL的人水平比较好,还可以实现非阻塞通讯,就是方案1和方案二的结合。
展开全部
以J2SDK-1.3为例,Socket和ServerSocket类库位于java.net包中。ServerSocket用于服务器端,Socket是建立网络连接时使用的。在连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例,完成所需的会话。对于一个网络连接来说,套接字是平等的,并没有差别,不因为在服务器端或在客户端而产生不同级别。不管是Socket还是ServerSocket它们的工作都是通过SocketImpl类及其子类完成的。 重要的Socket API: java.net.Socket继承于java.lang.Object,有八个构造器,其方法并不多,下面介绍使用最频繁的三个方法,其它方法大家可以见JDK-1.3文档。 . Accept方法用于产生"阻塞",直到接受到一个连接,并且返回一个客户端的Socket对象实例。"阻塞"是一个术语,它使程序运行暂时"停留"在这个地方,直到一个会话产生,然后程序继续;通常"阻塞"是由循环产生的。 . getInputStream方法获得网络连接输入,同时返回一个InputStream对象实例。 . getOutputStream方法连接的另一端将得到输入,同时返回一个OutputStream对象实例。 注意:其中getInputStream和getOutputStream方法均会产生一个IOException,它必须被捕获,因为它们返回的流对象,通常都会被另一个流对象使用。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
好像需要socket服务端代码和客户端代码...............都是可以使用javaBean写出来的吧》。。。。。。。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询