java和Delphi之间是通过socket进行通信的,Delphi端是服务器端,java开发的web是客户端。
需求是这样的,要实现一个座席的登录、登出、接听功能,web端有一个登录按钮,点击后向服务器端发送一个数据包,这个socket,要一直保持连接状态,后面的所有处理都跟这个socket相关,当web端接收到服务器端发送的某个特定数据包时,进行弹屏处理,在socket未断开之前,可能会接收很多弹屏的数据包,只有当web端点击登出按钮的时候,才关闭这个socket。
现在的情况是:
1、登录和登出都重开一个socket连接,登录登出功能都能实现,但是接收不到弹屏的数据包。
2、登录操作执行完后,不关闭socket,能接到弹屏的数据包,但是没法跳出while(true),跳出后,如果还有弹屏的数据包,就接收不到了。
3、web端是不作为服务器接收数据的,它只是连接到delphi的服务器,读取服务器发出的数据包。问题:
怎么实现登录成功后,登录的那个socket一直保持长连接,能不停的读取服务器的数据包,实现弹屏?javadelphisocketweb

解决方案 »

  1.   

    想像while(true)里是为了接受?要做的是在while之前要开个跳窗线程以消费者形式读取某个消息缓存序列,并展现出来(跳窗)
    而while(true)里每次接到新的信息在上面提到的消息缓存序列里加入这个新接受的消息
      

  2.   

    首先定义一个线程安全的集合类做消息池
    Vector msgPool;开一个线程放数据
    new Thread(重写run方法,进行放消息动作).start();另开一个线程取数据
    new Thread(重写run方法,进行取消息动作并弹窗,并每取一次sleep一个间隔时间).start()