在socket.io中,如果要将消息发送到特定的房间,通常在服务器端使用特定的语法:io.to(room).emit('event', 'message');.
但客户端(我的意思是在浏览器中运行的socket.io相关代码)如何表明消息应该转到特定的房间?
只创建这样的东西是常见的(当然服务器必须对其进行评估):
socket.emit('chat message', {room: 'abc', msg: 'hello there'});
Run Code Online (Sandbox Code Playgroud)
或者socket.io客户端库是否也为此提供了特定的语法?
编辑:澄清一下,我上面的建议似乎有效,我只是不确定是否有更好的解决方案.
我将一堆可运行的对象放入ExecutorService:
// simplified content of main method
ExecutorService threadPool = Executors.newCachedThreadPool();
for(int i = 0; i < workerCount; i++) {
threadPool.execute(new Worker());
}
Run Code Online (Sandbox Code Playgroud)
我希望我的程序/流程在所有工人完成后立即停止.但根据我的日志,它需要另外20-30秒才能发生.工人们没有分配任何资源,事实上,他们现在什么都不做.
不要误会我的意思,这对我来说不是一个至关重要的问题,我只是想了解发生了什么,我想知道这是不是正常行为.
我有一个由活动启动(未绑定)的服务.如果活动被破坏(例如通过按下后退按钮),则服务继续运行,这当然是有意的.但是,如果我将活动从"最近的应用"列表中滑出,则会立即重新启动该服务.这是可重现的,每次从列表中删除活动/应用程序时,都会对服务的onCreate方法进行新调用.两者之间没有调用onDestroy!
首先我认为服务被android杀死了,尽管我没有看到杀人的理由(活动和服务都没有资源消耗的东西,事实上它们是简约的,什么都不做).但后来我注意到服务实际上崩溃了.
V/MainActivity(856): onDestroy // swipe out of the list
I/ActivityManager(287): Killing 856:com.example.myapp/u0a10050: remove task
W/ActivityManager(287): Scheduling restart of crashed service com.example.myapp/.TestService in 5000ms
Run Code Online (Sandbox Code Playgroud)
代码并不值得注意,但在这里
活动:
public class MainActivity extends Activity {
private static final String TAG = "MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.v(TAG, "onCreate, starting service...");
startService(new Intent(this, TestService.class));
}
@Override
protected void onStart() {
super.onStart();
Log.v(TAG, "onStart");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.v(TAG, "onDestroy");
}
//[...]
}
Run Code Online (Sandbox Code Playgroud)
服务:
public class TestService extends …Run Code Online (Sandbox Code Playgroud) 我对Eclipse的两个不同版本--32/64bit有点困惑.
据我所知,Java字节码(=代码的构建)是独立于平台的.如果用户在32位JRE中运行字节码,则代码将以32位进程执行,如果用户在64位JRE中运行字节码,则代码将作为64位进程执行.
Eclipse需要运行JRE,因为它是用Java编写的.但是,如果只有用户的JRE版本确实重要,为什么Eclipse下载页面上有32和64位版本的Eclipse?
64位Eclipse版本是否需要64位JRE或JDK?如果是,为什么?
第二个困惑:我理解需要32位和64位版本的JRE.但是,如果生成的字节码是平台独立的,为什么有32位和64位版本的JDK?
谢谢
在大多数情况下,您希望用户只能访问用户自己创建的数据库中的实体.例如,如果存在由User1创建的日历,则只有User1应该能够在数据库中读取,更新或删除此特定日历及其内容.这不是一般的授权 - 在我的项目中,已经有一个基于角色的授权组件,它检查用户是否属于"日历编辑器"角色,但它不检查是否允许特定用户访问具体日历.
因此,最终必须在当前请求的用户标识和表示所请求日历的所有者的用户标识之间进行比较.但我想知道在哪里这样做.我的想法:
我可以在DAO级别上完成.但是,每个DAO方法都需要一个表示user-id的附加参数,这使得这些方法更加冗长并降低了可重用性.
例如
def findCalById(id: Int): Future[Option[Calendar]]
变
def findCalById(id: Int, ownerId: Int ): Future[Option[Calendar]]
优点是权限检查基本上在查询级别完成,这意味着如果用户无法访问日历,则不会从数据库返回日历.但话又说回来:如果在某些情况下没有返回日历,那么如何区分不存在的日历和当前用户无法访问的现有日历?两种不同的情景,产生相同的结果.
另一种选择可能是将DAO保持在此范围之外,并在服务层或类似的东西中进行检查.这意味着在DAO返回请求的日历之后执行检查.这种方法听起来比另一种方法更灵活,但它也意味着如果用户无法访问所请求的日历,则所请求的日历仍然消耗带宽和内存,因为在任何一种情况下都从数据库获取.
也许我还没有考虑其他选项.有没有最佳做法?
顺便说一下:我的网络应用程序中没有日历,这只是一个说明问题的例子.
database model-view-controller scala web-applications playframework
我已经开发了一个大型的Office应用程序级加载项,它就像一个魅力,但我在理解技术基础时遇到了问题.
我知道使用HTML敏捷包向HTML文档添加元素和属性很容易.但是如何使用html敏捷包将文档类型(例如HTML5)添加到HtmlDocument?谢谢
我正在编写一个应用程序来读取相对较大的文本文件,验证并转换数据(文本文件中的每一行都是一个自己的项目,大约有100M项目/文件)并创建某种输出.已经存在一个多线程Java应用程序(BlockingQueue在读取/处理/持久化任务之间使用),但我想实现一个同样的事情的Scala应用程序.
Akka似乎是构建并发应用程序的一个非常受欢迎的选择.不幸的是,由于演员的异步性,我仍然不明白单个演员能做什么或不能做什么,例如,如果我可以将演员作为传统工作者进行某种计算.
几篇文章说演员应该永远不会阻止,我理解为什么.但是阻止代码的给定示例总是只提到诸如阻塞文件/网络IO之类的东西......使得演员等待很短时间的事情当然是件坏事.
但是,如果演员是"阻挡",因为它实际上做了一些有用而不是等待的东西呢?在我的情况下,单行/文本项的处理和转换需要80ms,这是相当长的时间(纯处理,不涉及IO).这项工作可以直接由演员完成,还是应该使用Future(但是,如果我必须使用Futures,为什么首先使用Akka ......)?
Akka文档和示例表明,工作可以由演员直接完成.但似乎作者只做了非常简单的工作(比如在字符串上调用过滤器或递增计数器,就是这样).我不知道他们是否这样做是为了保持文档的简洁和简洁,或者因为你真的不应该在演员中做更多的事情.
你会如何为我的用例设计一个基于Akka的应用程序(读取文本文件,处理每一行需要相当长的时间,最终保持结果)?或者这是一种不适合Akka的问题?
通过谷歌,我发现了另一个关于stackoverflow的问题,关于Azure AppFabric和Windows Server AppFabric之间的差异和相似之处.有人提到,两种版本的AppFabric都更紧密地结合在一起,甚至融合在一起.这篇文章已经差不多2年了,今天在2012年,我仍然在努力解决AppFabric版本背后的计划.
从我的角度来看,我使用Azure AppFabric(缓存,服务总线,ACS),我对它很熟悉.但是当看到Server AppFabric的产品网站时,我很困惑.我错了还是缓存服务是这两种技术唯一的共同点?
谢谢
编辑:(至少,缓存相关的类和接口似乎是不正确的,这是正确的吗?)
我有一个固定深度为4的分层数据结构.为了更好地理解,我们假设以下(只是一个例子):
因此,级别之间始终存在1-N关系.
一个非常重要的用例(给定一个国家的id)是一次加载一个国家的整个"内容",对数据库的性能影响最小.
在第一个天真的方法中,我在Java中创建了4个授权类,其中实体"Country"包含"State"类型的列表,实体"State"包含"County"类型的列表,依此类推......但是之后JPA创建的当然不是4个表,而是7个(4个实体+ 3个用于1-N之间的连接).我不知道这是否是一个很好的解决方案,因为引擎盖下有很多加入.
我还试图将子类型映射到它们的父类型(一个城市属于一个县,一个县属于一个州,一个州属于一个国家).这导致4个表,但是从应用程序的角度来看,一次检索所有数据变得更加困难.如果我没错,我需要4个不同的请求而不是一个.
我怎么能解决这个问题?有没有办法将简单的表格布局(有四个表,而不是七个)与易于使用的实体类(父类型应该知道它的子节点)相结合?如果没有,你怎么会意识到这一点?
我正在使用JPA与Hibernate和PostgreSQL.