就是用java,netty寫的一個游戲服務(wù)器,目前經(jīng)常被爬蟲請求.
目前一夜過后,netty就卡住了,新的請求就會一直卡住,即不在控制臺打印出來,也不響應(yīng)客戶端請求.
有時候我在服務(wù)器的cmd上按個回車,就會又響應(yīng)客戶端請求.但這種方法顯然不能用...
我關(guān)閉用ChannelHandlerContext chc.close();
是不是這樣不能斷開連接,導(dǎo)致線程被占滿?
//分配用于處理業(yè)務(wù)的線程組數(shù)量
protected static final int BisGroupSize = 6;
//每個線程組中線程的數(shù)量
protected static final int worGroupSize = 10;
紅框處是我按回車后輸出的,不按回車前客戶端請求卡住.
//SocketControl
public static void run(int port) throws Exception {
ServerBootstrap bootstrap = new ServerBootstrap();
bootstrap.group(bossGroup, workerGroup);
bootstrap.channel(NioServerSocketChannel.class);
bootstrap.childHandler(new ChannelInitializer<SocketChannel>() {
@Override
protected void initChannel(SocketChannel ch) throws Exception {
ChannelPipeline pipeline = ch.pipeline();
// 以("\n")為結(jié)尾分割的 解碼器
pipeline.addLast("framer", new DelimiterBasedFrameDecoder(10240, Delimiters.lineDelimiter()));
pipeline.addLast("decoder", new MyStringDecoder(Charset.forName("UTF-8")));
pipeline.addLast("encoder", new StringEncoder(Charset.forName("UTF-8")));
pipeline.addLast(new SocketServerHandler());
}
});
bootstrap.bind(IP,port).sync();
log.info("Socket服務(wù)器已啟動完成,于 "+port+" 端口");
}
public class MyStringDecoder extends MessageToMessageDecoder<ByteBuf> {
private final Charset charset;
/**
* Creates a new instance with the current system character set.
*/
public MyStringDecoder() {
this(Charset.defaultCharset());
}
/**
* Creates a new instance with the specified character set.
*/
public MyStringDecoder(Charset charset) {
if (charset == null) {
throw new NullPointerException("charset");
}
this.charset = charset;
}
@Override
protected void decode(ChannelHandlerContext ctx, ByteBuf msg, List<Object> out) throws Exception {
if(msg.getByte(0)!='{' || msg.getByte(msg.capacity()-1)!='}'){
}else{
out.add(msg.toString(charset));
}
}
}
public class SocketServerHandler extends SimpleChannelInboundHandler<String> {
private static final Logger log = Logger.getLogger("ruanxin");
@Override
public void exceptionCaught(ChannelHandlerContext chc, Throwable cause) throws Exception {
log.info(cause.getMessage());
chc.close();
}
@SuppressWarnings("unchecked")
@Override
public void channelRead(ChannelHandlerContext chc, Object data) throws Exception {
if(data==null || !(data instanceof String)){
log.info("不是字符串或數(shù)據(jù)為空");
chc.close();
return;
}
String dataStr=(String) data;
log.info("|||" + dataStr+"|||");
if(!dataStr.startsWith("{") || !dataStr.endsWith("}")){
log.info("失敗數(shù)據(jù)內(nèi)容:data=" + dataStr);
chc.close();
return;
}
log.info("Read數(shù)據(jù)內(nèi)容:data=" + data);
//...
}
}
這個問題解決了....
win10因為cmd開了快速編輯,有時候會卡住,導(dǎo)致java項目一起卡住.按回車后項目繼續(xù)運行,東西就輸出出來了....
@ccfish 你的方向是對的,可沒有解決問題.
北大青鳥APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
北大青鳥中博軟件學(xué)院創(chuàng)立于2003年,作為華東區(qū)著名互聯(lián)網(wǎng)學(xué)院和江蘇省首批服務(wù)外包人才培訓(xùn)基地,中博成功培育了近30000名軟件工程師走向高薪崗位,合作企業(yè)超4
中公教育集團創(chuàng)建于1999年,經(jīng)過二十年潛心發(fā)展,已由一家北大畢業(yè)生自主創(chuàng)業(yè)的信息技術(shù)與教育服務(wù)機構(gòu),發(fā)展為教育服務(wù)業(yè)的綜合性企業(yè)集團,成為集合面授教學(xué)培訓(xùn)、網(wǎng)
達內(nèi)教育集團成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機構(gòu),是中國一站式人才培養(yǎng)平臺、一站式人才輸送平臺。2014年4月3日在美國成功上市,融資1
曾工作于聯(lián)想擔(dān)任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項目經(jīng)理從事移動互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負(fù)責(zé)iOS教學(xué)及管理工作。
浪潮集團項目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺面向?qū)ο箝_發(fā)經(jīng)驗,技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點難點突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開發(fā)經(jīng)驗。曾經(jīng)歷任德國Software AG 技術(shù)顧問,美國Dachieve 系統(tǒng)架構(gòu)師,美國AngelEngineers Inc. 系統(tǒng)架構(gòu)師。