yanf4j
简介,请看这里
。
这里俺要介绍下用yanf4j写个最简单的聊天室,可以直接telnet上去聊天。请先下载common-logging
和yanf4j-0.40-stable-bin.tar.gz
。
聊天室嘛,肯定要维护一个聊天者聊表:
<!---->List
<
Session
>
sessionList
=
new CopyOnWriteArrayList
<
Session
>
();
用户名让系统产生,用户1、2、3.....,最简单的嘛:
<!---->AtomicInteger userId
=
new AtomicInteger();
private String generateUserName() {
return
"
user
"
+
userId.incrementAndGet();
}
服务端要实现一个处理handler,来接受用户连接并转发聊天消息,嗯,继承HandlerAdapter,覆写相应的方法即可。当有人连上来的时候,覆写onSessionCreated方法:
<!---->public
void
onSessionCreated(Session session) {
sessionList.add(session);
//
给session取名
session.attach(generateUserName());
//
广播某人进来
broadcast(session, session.attachment()
+
"
enter room
"
);
}
当收到聊天消息的时候,广播给组内成员:
<!----> @Override
public
void
onReceive(Session session, String t) {
if
(t.equals(
"
quit
"
))
session.close();
else
broadcast(session,
"
[
"
+
session.attachment()
+
"
] say:
"
+
t);
}
private
void
broadcast(Session s, String msg) {
for
(Session session :
this
.sessionList) {
session.send(msg);
}
}
广播我们只是简单的遍历sessionList并send而已。完整的ChatServerHandler.java清单如下:
<!---->package
com.google.code.yanf4j.test.example.chat;
import
java.util.List;
import
java.util.concurrent.CopyOnWriteArrayList;
import
java.util.concurrent.atomic.AtomicInteger;
import
com.google.code.yanf4j.nio.Session;
import
com.google.code.yanf4j.nio.impl.HandlerAdapter;
public
class
ChatServerHandler
extends
HandlerAdapter
<
String
>
{
List
<
Session
>
sessionList
=
new
CopyOnWriteArrayList
<
Session
>
();
AtomicInteger userId
=
new
AtomicInteger();
@Override
public
void
onReceive(Session session, String t) {
if
(t.equals(
"
quit
"
))
session.close();
else
broadcast(session,
"
[
"
+
session.attachment()
+
"
] say:
"
+
t);
}
@Override
public
void
onSessionClosed(Session session) {
sessionList.remove(session);
broadcast(session, session.attachment()
+
"
leave room
"
);
}
private
void
broadcast(Session s, String msg) {
for
(Session session :
this
.sessionList) {
session.send(msg);
}
}
@Override
public
void
onSessionCreated(Session session) {
sessionList.add(session);
//
给session取名
session.attach(generateUserName());
//
广播某人进来
broadcast(session, session.attachment()
+
"
enter room
"
);
}
private
String generateUserName() {
return
"
user
"
+
userId.incrementAndGet();
}
}
接下来我们要实现聊天服务器了,yanf4j实现TCP Server的核心类是TCPController,假设端口设为8080:
<!---->package
com.google.code.yanf4j.test.example.chat;
import
java.io.IOException;
import
com.google.code.yanf4j.config.Configuration;
import
com.google.code.yanf4j.nio.TCPController;
import
com.google.code.yanf4j.nio.impl.StringCodecFactory;
public
class
ChatServer {
public
static
void
main(String[] args)
throws
IOException {
TCPController controller
=
new
TCPController(
new
Configuration(),
new
StringCodecFactory());
controller.setHandler(
new
ChatServerHandler());
controller.setPort(
8080
);
//
端口
controller.start();
//
启动
}
}
顺利完成,启动后,telnet到8080端口,看看效果
分享到:
相关推荐
4. **使用示例** 创建一个简单的Xmemcached客户端实例: ```java import net.rubyeye.xmemcached.MemcachedClient; import net.rubyeye.xmemcached.XMemcachedClientBuilder; public class XmemcachedExample ...
1.2.5版之后,yanf4j已经被整合入XMemcached本身,无需额外依赖。 #### 使用指南 - **依赖包**:XMemcached依赖于SLF4J日志框架。 - 对于使用Maven构建项目的用户,可以通过简单的依赖声明(如上述示例)轻松集成...
It's nio based (using my opensource nio framework :yanf4j), and was carefully tuned to get top performance. homepage: http://code.google.com/p/xmemcached/ downloads; ...
- **基于Yanf4j框架**:XMemcached基于Java NIO框架Yanf4j构建,具有清晰的结构和良好的分层设计,易于扩展和定制。 #### 三、使用指南 **3.1 简单示例** 为了帮助读者更好地理解XMemcached的基本使用方法,下面...
Gecko基于yanf4j(Yet another nio framework for java)构建,这是一个Reactor+Handler模式的NIO框架。框架的主要组件包括: - **Controller**:控制接口,负责启动、管理、停止框架,并与业务代码交互。 - **...
9. **可扩展性**:基于yanf4j框架,XMemcached的架构清晰,易于扩展和维护。 **使用指南** 开始使用XMemcached,首先需要创建一个`XMemcachedClientBuilder`实例,并指定Memcached服务器的地址。例如,若服务器IP...
import com.google.code.yanf4j.config.Configuration; import net.rubyeye.xmemcached.MemcachedClient; // 初始化客户端 Configuration conf = new Configuration("localhost:11211"); MemcachedClient client = ...
9. **可扩展性**:基于yanf4j NIO框架,代码结构清晰,易于扩展和定制。 **使用指南** 开始使用XMemcached,首先需要构建MemcachedClient实例,如以下示例所示: ```java MemcachedClientBuilder builder = new ...
[17]HUGS,YANF,CHANCH等人的工作涉及使用统一的三维形态模型进行面部识别。这些研究不仅展示了模式识别与人工智能领域的深度技术应用,也揭示了当前研究的发展趋势,例如三维模型构建、面部识别、图像编辑等。 此外...
Yanf打开一个配置文件,对其进行读取,从其上的站点中获取新闻,然后将其放在类似于slashdot的网页中。 它支持Slashdot,Freshmeat。 32bitsonline,Segfault,Packetstorm,Linuxtelephony,Linuxtoday,Ufie,RDF...
同时,有一个活跃的用户社区,提供插件开发和使用交流,使软件始终保持活力。 总结来说,Foobar2000凭借其卓越的音质、丰富的自定义选项和强大的功能,成为了许多音乐爱好者的首选播放器。无论是对于无损音乐的追求...
免费分享。