Java服务端如何用Socket处理单台客户端的多次请求?
服务端需要做两件事情,一个是验证用户登陆(客户端传来的是user对象,服务端需要返回相应权限选择),一个是处理用户的增删改查请求(返回的结果是一个List对象)。现在问题...
服务端需要做两件事情,一个是验证用户登陆(客户端传来的是user对象,服务端需要返回相应权限选择),一个是处理用户的增删改查请求(返回的结果是一个List对象)。
现在问题是,服务端在返回权限之后,socket就关闭了,不能处理下面的增删改查业务。
我试过把监听写成死循环,但是这样写,所有的IO流和业务代码都要写在socket初始化这个方法里面了,我是想把socket初始化、用户验证、每个业务请求所对应的处理都写在不同的方法体里,然后在main方法里调用,不知道该怎么去解决,想到过多线程,但是多线程的话,所有的方法也是写在run()里的,不知道是不是这样设计。
求解决方法。。 展开
现在问题是,服务端在返回权限之后,socket就关闭了,不能处理下面的增删改查业务。
我试过把监听写成死循环,但是这样写,所有的IO流和业务代码都要写在socket初始化这个方法里面了,我是想把socket初始化、用户验证、每个业务请求所对应的处理都写在不同的方法体里,然后在main方法里调用,不知道该怎么去解决,想到过多线程,但是多线程的话,所有的方法也是写在run()里的,不知道是不是这样设计。
求解决方法。。 展开
1个回答
展开全部
”服务端在返回权限之后,socket就关闭了。“这说明你设计的有问题,应该返回权限后继续处理,增删改查等业务,否则会有安全问题。
我觉得,socket初始化、用户验证、每个业务请求所对应的处理,这一套操作应该放在监听的一次循环里,整个结构还是死循环。
其实,最常用的验证身份的机制是像Java Web里面的session,用户信息放进去以后,一段时间内客户过来的多次请求都从session里的用户信息验证就可以了,这也是http这种无连接方式的机制。你的这种需求这样实现比较方便啊,而且有很多增删改查的框架比如hibernate可用,为什么要用Socket发明轮子呢,最差也可以用嵌入式的tomcat或jetty这种服务器把服务嵌入到程序里实现桌面应用啊。
我觉得,socket初始化、用户验证、每个业务请求所对应的处理,这一套操作应该放在监听的一次循环里,整个结构还是死循环。
其实,最常用的验证身份的机制是像Java Web里面的session,用户信息放进去以后,一段时间内客户过来的多次请求都从session里的用户信息验证就可以了,这也是http这种无连接方式的机制。你的这种需求这样实现比较方便啊,而且有很多增删改查的框架比如hibernate可用,为什么要用Socket发明轮子呢,最差也可以用嵌入式的tomcat或jetty这种服务器把服务嵌入到程序里实现桌面应用啊。
更多追问追答
追问
哥,俺档次低,还没到J2EE,我说的这些全是J2SE的内容, 最近在做一个超市的练习,无界面无数据库,增删改查全是集合的操作,socket这块迷糊了,请教大哥。
追答
哦,作为练习吧,那就还是用客户每次请求都循环,循环内部socket初始化、用户验证、每个业务请求所对应的处理,至于请求的类型(增,删,改或查)可以参照命令模式,你自定义一个命令做判断,最差用switch case这种也可以了。
一般是多个用户才开启不同的线程,对于单客户一般不用多线程的。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询