即时通讯,即发送了消息后对方马上收到,一般用tcp或者udp协议来传输消息。我也是第一次深入学习tcp和udp的使用,编码过程中遇到很多难题,自己辛辛苦苦百度,解决了一个又一个困难,但是个人的听闻是有限的,希望能抛砖引玉,听取到大家更好的解决办法。
项目地址:http://download.youkuaiyun.com/detail/qq_27311165/9911099
首先,这个项目的服务器大部分bean用Spring来托管,Spring托管了项目的dao层和业务层(QQService)还有helper模块(UDPHelper、TCPConnectionManager这两个单例),而且都是单例。单例就可能牵扯到线程安全问题,dao都是单例,jdbc中,如果多个线程同时执行静态方法DriverManager.getConnection()会抛出异常,所以将该静态方法封装到DBHelper的getConnection()方法中,加上synchronized使线程同步,因为dao的方法除了dbHelper.getConnection();外其他都是访问局部变量和参数,每个线程调用dao的方法时都有自己的局部变量和参数,所以dao现在是线程安全的。服务器其他部分经过我不停地取证,应该也是线程安全的。 客户端,因为我想急于验证它和服务器的通讯,所以写得非常简便。客户端读者也可以用另外的语言编写,只要发送的tcp和udp报文能被服务器解析(“报文规定.txt”已经在压缩包中)。
数据库只有3张表user、friend、unreadmsg。
CREATE TABLE user(
userid