81,092
社区成员
发帖
与我相关
我的任务
分享
@SpringBootApplication
public class ServerApplication {
private static Logger LOGGER = LoggerFactory.getLogger(ServerApplication.class);
public static void main(String[] args) {
SpringApplication.run(ServerApplication.class, args);
try{
//开启 netty 服务
new Thread(() -> {
try {
LOGGER.info("启动");
new NettyServer().start(6666);
}catch(Exception ex) {
LOGGER.error(ex.getMessage(), ex);
}
}).start();
}catch (Exception ex){
LOGGER.error(ex.getMessage(), ex);
}
}
}
public class Session {
//SessionID
private String id;
//APP的openid
private String openid;
//设备的IMEI
private String imei;
//最后访问时间
private Instant lastAccessTime;
//连接通道
private ChannelHandlerContext ctx;
......
public class SessionManager {
private static final String TAG = SessionManager.class.getSimpleName();
private static SessionManager instance;
public static synchronized SessionManager getInstance() {
if (instance == null) {
instance = new SessionManager();
}
return instance;
}
private final Map<String, Session> sessionMap = new ConcurrentHashMap<String, Session>();
public Map<String, Session> getAllSession() {
return sessionMap;
}
public Session getSession(String sessionId) {
return sessionMap.get(sessionId);
}
public void putSession(Session session) {
sessionMap.put(session.getId(), session);
}
public void removeSession(Session session) {
sessionMap.remove(session.getId());
}
}
[/quote]
非常感谢, 原来还有这种方法啊, 我是用的 谷歌 的 cache 不过这个是由时间限制的public class Session {
//SessionID
private String id;
//APP的openid
private String openid;
//设备的IMEI
private String imei;
//最后访问时间
private Instant lastAccessTime;
//连接通道
private ChannelHandlerContext ctx;
......
public class SessionManager {
private static final String TAG = SessionManager.class.getSimpleName();
private static SessionManager instance;
public static synchronized SessionManager getInstance() {
if (instance == null) {
instance = new SessionManager();
}
return instance;
}
private final Map<String, Session> sessionMap = new ConcurrentHashMap<String, Session>();
public Map<String, Session> getAllSession() {
return sessionMap;
}
public Session getSession(String sessionId) {
return sessionMap.get(sessionId);
}
public void putSession(Session session) {
sessionMap.put(session.getId(), session);
}
public void removeSession(Session session) {
sessionMap.remove(session.getId());
}
}
@Component
public class NettyListener implements ApplicationListener<ContextRefreshedEvent> {
@Override
public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) {
if (contextRefreshedEvent.getApplicationContext().getParent() == null){
try {
new NettyServer().start(6666);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
我用了这段代码解决了问题, 感谢万能的开源社区package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
@SpringBootApplication
public class Application extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Application.class);
}
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}