问题列表 - 第31581页

如何在PHP和Java程序之间进行通信?

我正在开发一个Web应用程序,它经常需要运行计算密集型查询,其结果存储在一个单独的表中.使用MySQL,此查询大约需要500毫秒(尽可能优化,相信我).为了消除这个瓶颈,我创建了一个Java程序,它将相关的DB数据加载到内存中并执行查询本身; 它需要大约8 毫秒(我有点自豪).我想使用这个Java程序来获取结果,如果它失败或不可用,则故障转移到PHP运行MySQL查询.

由于将数据加载到Java应用程序需要一些时间,因此它将加载一次并继续作为后台进程运行. 现在,问题是我如何通过PHP与这个Java应用程序进行通信?

记住:

  • 多个PHP实例可能需要同时与此Java进程通信.
  • 如果找不到Java实例(例如:由于某种原因它崩溃),PHP应该通过使用较旧和较慢的MySQL方法来进行.
  • 可以接受诸如Memcache之类的中间过程.
  • 理想情况下,该解决方案可以承受竞争条件.
  • 我最好不要使用MySQL作为中介.

我打算使用Memcache,其中PHP将写入已知密钥并轮询,直到该密钥更改为"已完成",同时Java将轮询该密钥,并且一旦发现某些内容执行该作业并将其设置为"已完成".但是,由于两个原因,这不起作用.首先,PHP和Java使用序列化对象读取/写入Memcache,并且没有办法改变它,我不希望Java反序列化PHP对象,反之亦然 - 它太乱了.其次,这不符合ACID - 如果在那里建立的队列将存在竞争条件.

就目前而言,我坚持轮询MySQL"选择"以查看作业是否已脱离队列,这远非最佳解决方案,因为轮询时间需要较慢,因此MySQL不会过于频繁.我需要更好的解决方案!

谢谢.

编辑:Duh.看起来我将在Java中使用某种SocketServer,我对此并不熟悉.一个例子可能有帮助:)

php java architecture memcached

4
推荐指数
2
解决办法
9469
查看次数

如何防止表单被提交?

我有一个表单,其中有一个提交按钮.

但是,我想以某种方式'捕获'提交事件并防止它发生.

有什么方法可以做到这一点吗?

我无法修改提交按钮,因为它是自定义控件的一部分.

html javascript forms

215
推荐指数
7
解决办法
36万
查看次数

有什么办法以编程方式在android上运行shell命令吗?

有没有办法在我的应用程序上运行终端命令,然后访问我的UI上的数据?具体top.

linux android

38
推荐指数
4
解决办法
8万
查看次数

用Thin或Passenger取代杂种可以提高可扩展性

我想提高我的Rails应用程序的可伸缩性.目前它运行在apache/mongrel(实际上是mongrel集群)上.

用Thin或Passenger取代它会改善我应用的可扩展性吗?

谢谢,
Sivakumar.

ruby-on-rails

3
推荐指数
1
解决办法
1480
查看次数

自跟踪实体 - AcceptChanges无法继续,因为对象的键值与ObjectStateManager中的另一个对象冲突

我已经被这个问题困住了一个多星期了.希望有人能指出我正确的方向.

我首先简要介绍一下我的架构.

资产1 ---> 1地址* - > 1区* - > 1区* - > 1国家

套餐1 - >*资产

使用自我跟踪实体(STE)+ WCF.

脚步:

  1. 调用数据存储以获取资产列表.
  2. 调用数据存储以获取包列表.
  3. 用户选择一个包并为其分配一些资产.
  4. 保存包裹.

在步骤2中,呼叫使用预先加载的地址.

from p in context.Assets.Include("Address.Area.Region.Country")
Run Code Online (Sandbox Code Playgroud)

这是尝试呼叫时的错误

context.Packages.ApplyChanges(package)
Run Code Online (Sandbox Code Playgroud)

AcceptChanges无法继续,因为对象的键值与ObjectStateManager中的另一个对象冲突.在调用AcceptChanges之前,请确保键值是唯一的.

编辑

在窥探之后,我发现这是一个STE问题.问题是您无法持久存储包含此处概述的同一实体的多个实例的图形.这是我的问题.

如何将实体添加到我的实体集合中.新实体可能具有包含与集合中已有密钥相同的密钥的相关实体.即添加可能包含相同地址,区域,地区或国家/地区实体的新资产.

这是我的约束:

  1. 我必须使用导航集合,因为它会影响UI.
  2. 我无法预先获取将涉及的所有实体,因为数据集太大了.
  3. 我必须能够随时拍摄实体的快照以保留历史记录并使用它来"撤消"任何更改.

我知道Diego B Vega建议的可能解决方案,但这些不是我可以用于我的解决方案的选项.有没有人有任何其他想法?

wcf entity-framework self-tracking-entities objectcontext

12
推荐指数
2
解决办法
2万
查看次数

Netbeans安装程序

我为Windows下载了Netbeans IDE 6.9.但我找不到安装程序选项.看http://blogs.oracle.com/geertjan/entry/generate_a_netbeans_platform_installer,它说有一个,也在http://netbeans.org/community/releases/69/index.html上说它有新的功能"基于NetBeans平台的应用程序为大多数常见操作系统生成安装程序".

为什么我没有?

installer netbeans

5
推荐指数
1
解决办法
435
查看次数

这是依赖于浏览器的JavaScript代码吗?

为什么IE和FF的输出不同?
在IE中显示:Hello和In FF显示:

var message = "Hi";
setTimeout(function(){alert(message);},10);
setTimeout(function(){message = "Hello";},0);
Run Code Online (Sandbox Code Playgroud)

什么是标准杆?哪个浏览器做得对?

注意:如果我在FF中将10转换为11,那么它会显示Hello

javascript

8
推荐指数
1
解决办法
828
查看次数

如何在C++中"返回一个对象"?

我知道标题听起来很熟悉,因为有很多类似的问题,但我要问问题的不同方面(我知道在堆栈上放置东西并将它们放在堆上之间的区别).

在Java中,我总是可以返回对"本地"对象的引用

public Thing calculateThing() {
    Thing thing = new Thing();
    // do calculations and modify thing
    return thing;
}
Run Code Online (Sandbox Code Playgroud)

在C++中,要做类似的事情,我有2个选项

(1)每当我需要"返回"一个对象时,我都可以使用引用

void calculateThing(Thing& thing) {
    // do calculations and modify thing
}
Run Code Online (Sandbox Code Playgroud)

然后像这样使用它

Thing thing;
calculateThing(thing);
Run Code Online (Sandbox Code Playgroud)

(2)或者我可以返回指向动态分配对象的指针

Thing* calculateThing() {
    Thing* thing(new Thing());
    // do calculations and modify thing
    return thing;
}
Run Code Online (Sandbox Code Playgroud)

然后像这样使用它

Thing* thing = calculateThing();
delete thing;
Run Code Online (Sandbox Code Playgroud)

使用第一种方法我不必手动释放内存,但对我而言,它使代码难以阅读.第二种方法的问题是,我必须记住delete thing;,这看起来不太好.我不想返回复制的值,因为它效率低(我认为),所以这里提出问题

  • 是否有第三种解决方案(不需要复制值)?
  • 如果我坚持第一个解决方案,有什么问题吗?
  • 何时以及为什么要使用第二种解决方案?

c++ performance return reference

155
推荐指数
5
解决办法
8万
查看次数

如何覆盖ckeditor中按钮的处理程序?

我想为保存按钮设置一个自定义处理程序.

如何覆盖默认命令?

overriding save ckeditor

5
推荐指数
2
解决办法
6682
查看次数

SQL脚本 - 检查IP是否已列入黑名单

我正在学习SQL,我希望你的建议,看看这段代码是否写得正确,还是更好的方法.这个脚本创建:

  • 用于存储黑名单的IP地址的表
  • 允许在4个八位字节中吐出IP地址的sproc
  • 允许检查IP是否为黑名单的SPROC请告知我们!谢谢!

    -- Black Listed Table
    CREATE TABLE UtlBlacklistedIPs 
            ( 
                octet1 TINYINT, 
                octet2 TINYINT, 
                octet3 TINYINT, 
                octet4 TINYINT 
            );
    
    Run Code Online (Sandbox Code Playgroud)

1 SPROC

    -- Convert an IP address in 4 octet for db storing
  CREATE PROCEDURE dbo.storeIPoctetsv1 
   @ip CHAR(15) 
  AS 
  BEGIN 
   SET NOCOUNT ON 
   INSERT UtlBlacklistedIPs(octet1, octet2, octet3, octet4) 
    SELECT 
     CONVERT(TINYINT, PARSENAME(@ip, 4)), 
     CONVERT(TINYINT, PARSENAME(@ip, 3)), 
     CONVERT(TINYINT, PARSENAME(@ip, 2)), 
     CONVERT(TINYINT, PARSENAME(@ip, 1)) 
  END
Run Code Online (Sandbox Code Playgroud)

2 SPROC

-- SPROC check if an IP address has been black listed
CREATE PROCEDURE dbo.sprocCheckIp
     @ip …
Run Code Online (Sandbox Code Playgroud)

sql t-sql database

6
推荐指数
1
解决办法
314
查看次数