我注意到一些意想不到的行为.在过去的几个月中,Firefox,Flash播放器或两者都发生了变化,使得处于非活动浏览器选项卡中的Flash电影不再实时执行.它们似乎仍然可以执行,但只能以突发方式执行,而不是以可预测的方式执行.这是一个问题,因为我开发了一个基于Flash(Actionscript 2.0,Flash CS3)的多人游戏,可以维持网络连接并允许玩家聊天等.
我们的许多玩家抱怨Firefox在玩游戏时崩溃.我也注意到了它,不是太频繁,但它每周都会崩溃几次.(Firefox崩溃,我没有收到来自Flash播放器的消息,表明我的代码中存在无限循环或问题)我的理论是,当我的游戏中存在大量活动时,这种新行为导致崩溃,导致大量未处理我的游戏的网络流量在Firefox/Flash之前获得缓冲将使其有机会执行.这可能导致缓冲区溢出或数据包丢失,结果导致崩溃.有时我会切换回运行我的游戏的标签并发现一个显示错误,看起来好像Flash完全无法执行它应该执行的操作.我会假设这种新行为是故意的,例如,防止非活动选项卡中的所有基于Flash的广告执行,从而杀死性能.
在对Chrome(5.0.342.9测试版)的快速测试中,Flash的"暂停"似乎也存在,但不知何故,它似乎不是一个问题.我的用户只抱怨Firefox崩溃,而不是其他浏览器.
我的机器:
有任何想法吗?理想情况下,我想为我的Flash游戏禁用此行为,以便即使在非活动选项卡中也可以实时执行.谢谢你的帮助!
我想编写一个函数,它将获取一个对象并将其转换为包含该对象作为单个元素的数组.在我看来,我可以使用泛型和变量参数来自动执行此操作,而无需为我希望使用的每个对象类型编写函数.这段代码会起作用吗?我需要注意哪些细微之处?
public static <X> X[] convert_to_array(X... in_objs){
return in_objs;
}
Run Code Online (Sandbox Code Playgroud) 我有一个令人讨厌的问题,即从Java(NIO)服务器(运行Linux)快速连续发送多个大型消息到客户端将导致截断的数据包.消息必须很大并且发送速度非常快以便发生问题.这基本上就是我的代码所做的事情(不是实际代码,而是或多或少正在发生的事情):
//-- setup stuff: --
Charset charset = Charset.forName("UTF-8");
CharsetEncoder encoder = charset.newEncoder();
String msg = "A very long message (let's say 20KB)...";
//-- inside loop to handle incoming connections: --
ServerSocketChannel ssc = (ServerSocketChannel)key.channel();
SocketChannel sc = ssc.accept();
sc.configureBlocking(false);
sc.socket().setTcpNoDelay(true);
sc.socket().setSendBufferSize(1024*1024);
//-- later, actual sending of messages: --
for (int n=0; n<20; n++){
ByteBuffer bb = encoder.encode(CharBuffer.wrap(msg+'\0'));
sc.write(bb);
bb.rewind();
}
Run Code Online (Sandbox Code Playgroud)
因此,如果数据包足够长并尽可能快地发送(即在这样的循环中没有延迟),那么在另一端它经常会出现这样的情况:
[COMPLETE PACKET 1]
[COMPLETE PACKET 2]
[COMPLETE PACKET 3]
[START OF PACKET 4][SOME OR ALL OF PACKET 5] …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Apache Mina构建基于Java NIO的套接字服务器.我真的需要知道远程主机的端口,而不仅仅是IP地址,而且似乎Mina只公开了SocketAddress(可以向下转换为InetAddress)对象.我可以从InetAddress获取IP地址,但我通常使用Socket.getPort()来获取端口号,但是Mina似乎模糊了这些低级对象.还有另外一种方法吗?谢谢!
在我的Java NIO实现中,我无法使SelectionKey.attach()工作.基本上,一旦客户端连接(OP_ACCEPT兴趣操作),我将它们添加到一个地图,在那里他们的IP地址映射到一个维护客户端状态的对象.然后,当OP_READ发生时,我再次检索客户端的IP地址,这次从地图中获取值并以此方式获取客户端的状态对象.
这里的问题是我必须进行地图查找每次从网络读取数据.那里有很多浪费的工作.所以,我很高兴看到你可以将一个任意对象类型附加到SelectionKey,当你调用SelectionKey.attachment()时,它应该很容易被检索,即使我们现在正处理一个不同的事件(在OP_READ期间检索而不是放入OP_ACCEPT期间的地图).
问题是它不起作用.当我检索附件时,它始终为null.如果我通过attach()设置附件然后立即调用attachment(),它确实有效.不知何故之间,它失去了联想.
对不起,我的代码在这里发帖有点长,但是如果你看看这个帖子中的评论: 链接文本 ......你会看到其他一些人基本上得出了相同的结论:attach()和attachment()不起作用,从来没有.
是否有一个技巧让它工作,或者我是否坚持在地图中手动执行查找所需的邪恶开销每次都有一个新的读取事件要处理?
最后,有没有办法在一个新的子类中"包装"SelectionKey,它将正确处理attach()和attachment()?
谢谢!
我想根据相对时间记录某些事件.我不关心当天发生什么事,我只是想知道事件发生在2分13秒和243毫秒之前.比方说我有:
long event_ms = [some time in ms since the Epoch];
long now_ms = [current time in ms since the Epoch];
long diff_ms = now_ms - event_ms;
Run Code Online (Sandbox Code Playgroud)
diff_ms包含事件发生的AGO毫秒数.我只是想这次格式化(使用格式HH:mm:ss.SSS).最简单的方法是什么?谢谢!
我正在编制一个与客户端通信的最新网络消息列表.基本上我只想要一个存储多达X个消息对象的列表.列表达到所需大小后,应删除列表中最旧的(第一个)项目.该集合需要维持其秩序,我需要做的就是
这样做的效率最高的结构/数组/集合/方法是什么?谢谢!
某些应用和IDE建议安装Adobe Flash播放器的调试版本.我知道即使没有通过测试电影运行Flash,这也允许查看跟踪语句,但还有什么不同?什么?
另外,如何查看正在运行的调试播放器而不是常规播放器?
谢谢!
假设我有一堆用于不同目的的类实例,所以我希望能够直接通过名称引用它们:
SomeObject aardvark = new SomeObject();
SomeObject llama = new SomeObject();
SomeObject tiger = new SomeObject();
SomeObject chicken = new SomeObject();
Run Code Online (Sandbox Code Playgroud)
但是我还想要一个数组来轻松迭代:
SomeObject[] animals = {aardvark, llama, tiger, chicken};
Run Code Online (Sandbox Code Playgroud)
我的问题是这个.当我这样做时会发生什么:
llama = new SomeObject();
Run Code Online (Sandbox Code Playgroud)
我将创建一个全新的美洲驼对象.这对我的动物阵列有何影响?它会引用新的llama对象,还是以某种方式引用旧的llama对象的副本?
我知道Java是"通过价值传递",但我仍然对这样的东西感到困惑.当我使用NEW关键字时,该对象引用的"值"是否会发生变化?谢谢!
通常我会从Java中向我的日志文件发送调试信息,它有助于提供关于代码中生成日志消息的位置的正确信息,以便我可以快速参考它.我不想在日志消息中对其位置进行硬编码,因为如果我重命名其方法或者将代码重构为不同的结构,我必须记住更新日志消息.我希望有一个静态函数,只返回调用函数的类和方法名称.例如,如果我有一个名为Machine的类和一个名为doStuff的方法,我希望该方法中的日志消息生成代码看起来像这样:
String log_msg = Blah.getClassAndMethodName()+" did the wrong thing!";
Run Code Online (Sandbox Code Playgroud)
类Blah中的静态方法getClassAndMethodName()将返回"Machine.doStuff".这样,当我查看日志文件时,我可以轻松地告诉代码在哪里生成消息.我意识到这有点棘手,因为我需要Blah中的这个方法在一个单独的类Machine中返回有关其调用函数的信息,但是这样可以很容易地在任何地方使用这个静态调用.
我不知道这是否可行,但我很感激任何答案!另外,假设有可能,这是一种特别高的开销类型的操作吗?(我假设需要反思,而不是我的强项)
谢谢!
例如,假设我想找到使用任何字符串对象的==运算符的所有实例,以便我可以用.equals()代替它.我该怎么做这样的搜索?否则我必须逐行检查我的所有代码......谢谢:)
我想从我的Flash项目中打开外部URL.我通常使用这样的东西:
getURL("javascript:newwin=window.open('http://someurl.com','','');");
Run Code Online (Sandbox Code Playgroud)
但是,如果Javascript不可用(如果SWF未嵌入HTML中),那么这将失败.如何检测Javascript是否可用?如果它不可用,我可能只是使用getURL并给它直接的URL,虽然我只想这样做,如果使用Javascript方法是不可能的.谢谢!
Everyone is shooting down MD5 these days for its issues in the context of storing passwords. But what about uses where I just want to add a layer of authentication to something that will likely be used once?
This is just a hypothetical example, but let's say I have a feature to allow a user to reset their password. I email the user a link that they can click to set a new (randomly-generated) password.
My current thinking is that …
java ×9
flash ×3
nio ×2
actionscript ×1
apache-mina ×1
eclipse ×1
firefox ×1
html ×1
javascript ×1
md5 ×1
networking ×1
nonblocking ×1
reflection ×1
security ×1
sha1 ×1
sockets ×1
tabs ×1