小编Mik*_* S.的帖子

事件处理程序中的JavaScript同步和关键部分

我有一个函数,它是一个事件处理程序websocket.onmessage,因为服务器可以发送多个消息(一个接一个),每个消息将触发该事件,并且因为功能块可能需要几秒钟(内部进行大量渲染) ),当第一个函数调用仍在运行时,可以再次调用该函数.在某些情况下,我需要在此函数中使用一个关键块,以便第二次调用仅在第一次调用结束时启动关键部分,这被认为是在JavaScript中实现锁定的"最佳实践"?

javascript synchronization javascript-events

7
推荐指数
1
解决办法
9050
查看次数

C#Encoding.Converting Latin to Hebrew

我正在尝试获取和解析一个用希伯来语编写的在线excel文档,但不幸的是用非希伯来语编码.

作为一个例子,我正在尝试转换以下字符串:"âìéåï_1",它使用C#代码作为希伯来语的第一个工作表名称,但我无法这样做.

我知道上面是可转换的,因为当我在NotePad ++中打开它并选择编码/字符集/希伯来语/ Windows 1255时,我可以看到:"גליון_1"这是上述字符串的正确希伯来语表示.

我正在使用以下代码

            string str = "âìéåï_1";

            Encoding windows = Encoding.GetEncoding("Windows-1255");
            Encoding ascii = Encoding.GetEncoding("Windows-1252");
            byte[] asciiBytes = ascii.GetBytes(str);
            byte[] windowsBytes = Encoding.Convert(ascii, windows, asciiBytes);

            char[] windowsChars = new char[windows.GetCharCount(windowsBytes, 0, windowsBytes.Length)];
            windows.GetChars(windowsBytes, 0, windowsBytes.Length, windowsChars, 0);
            string windowsString = new string(windowsChars);
Run Code Online (Sandbox Code Playgroud)

我假设原始字符串的编码是Windows-1252,因为当我将它粘贴到NotePad ++并将编码更改为Windows-1252时,字符串保持不变...

我可能在这里做错了,有谁知道如何正确转换上述内容?

谢谢,

米奇

.net c# encoding hebrew

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

Newtonsoft JSON.NET与Json Web服务的兼容性

我一直在想,因为我在任何地方都找不到它-

可以将基于Json的Web服务与Json.NET库一起使用吗?

换句话说,有没有一种方法可以使JSON.NET反序列化Web服务的请求的JSON对象,而不是.NET默认的序列化器?

一种实现方法可能是声明WebMethod接受纯字符串,然后使用JSON.NET的JsonConvert将原始字符串反序列化为正确的对象,但这意味着请求的语法(从客户端)将是一种尴尬的

还有其他方法或建议吗?

谢谢,

米奇

.net c# jquery web-services json.net

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

Ruby模块和Module#append_features解释

最近我碰到了这篇非常有趣的帖子:http://opensoul.org/blog/archives/2011/02/07/concerning-activesupportconcern/,它遍历(并解释)了ActiveSupport::Concern源代码.

出现了一些问题,但最重要的是:

显然,有一种方法称为append_features(至少由文档):"Ruby的默认实现方法将此模块的常量,方法和变量添加到基础模块".

我一直认为模块在方法查找链意义上与类相同 - 唯一的区别是你不能从中实例化对象,并且它没有被定义为这个类的"超类"(因为一个模块)实际上并不是一个班级.这意味着当一个类includes是模块时,该模块只是作为类的继承层次结构中的直接父类添加,因此,将在模块中查找包含类中缺少的方法.

但是,如果是这种情况,那么append_features实际上"将方法添加到基本模块"意味着什么,这意味着您可以通过重写此方法(ActiveSupport::Concern实际上这样做)来实际防止此行为.

有人可以在我脑海里创造一些订单吗?

ruby inheritance module

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

Ruby - 基于 Redis 的互斥体,具有过期实现

我正在尝试使用 Redis 实现一个基于内存的多进程共享互斥体,它支持超时。

我需要互斥体是非阻塞的,这意味着我只需要知道是否能够获取互斥体,如果不能,只需继续执行回退代码即可。

沿着这些思路:

if lock('my_lock_key', timeout: 1.minute)
  # Do some job
else
  # exit
end
Run Code Online (Sandbox Code Playgroud)

可以使用 redis 实现未过期的互斥setnx mutex 1

if redis.setnx('#{mutex}', '1')
  # Do some job
  redis.delete('#{mutex}')
else
  # exit
end
Run Code Online (Sandbox Code Playgroud)

但是,如果我需要一个具有超时机制的互斥体(例如,为了避免 ruby​​ 代码在命令之前失败redis.delete,导致互斥体被永远锁定的情况,但不仅仅是这个原因)怎么办?

这样做显然是行不通的:

redis.multi do  
  redis.setnx('#{mutex}', '1')
  redis.expire('#{mutex}', key_timeout)
end
Run Code Online (Sandbox Code Playgroud)

因为即使我无法设置互斥体(setnx返回 0),我也会重新设置互斥体的过期时间。

当然,我希望有类似的东西setnxex,可以自动设置密钥的值和过期时间,但前提是该密钥尚不存在。不幸的是,据我所知,Redis 不支持这一点。

然而,我做了 find renamenx key otherkey,它允许您将一个键重命名为其他键,前提是另一个键尚不存在。

我想出了这样的东西(出于演示目的,我将其整体写下来,并且没有将其分解为方法):

result = redis.multi do
  dummy_key = "mutex:dummy:#{Time.now.to_f}#{key}"
  redis.setex dummy_key, key_timeout, 0
  redis.renamenx dummy_key, key …
Run Code Online (Sandbox Code Playgroud)

ruby multithreading mutex locking redis

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

C#锁定机制 - 只写锁定

继续我最近关于C#和.NET中的锁的思考,

请考虑以下情形:

我有一个类,其中包含一个特定的集合(对于这个例子,我已经使用了一个Dictionary<string, int>),它使用一种特定的方法每隔几分钟从一个数据源更新,你可以在下面看到它:

    DataTable dataTable = dbClient.ExecuteDataSet(i_Query).GetFirstTable();

    lock (r_MappingLock)
    {
        i_MapObj.Clear();

        foreach (DataRow currRow in dataTable.Rows)
        {
            i_MapObj.Add(Convert.ToString(currRow[i_Column1]), Convert.ToInt32[i_Column2]));
        }
    }
Run Code Online (Sandbox Code Playgroud)

r_MappingLock是一个专用于锁定关键部分的对象,该部分刷新字典的内容.

i_MapObj是字典对象

i_Column1和i_Column2是数据表的列名,其中包含映射所需的数据.

现在,我还有一个类方法,它接收一个字符串并根据提到的字典返回正确的映射int.

我希望这个方法等到刷新方法完成它的执行,所以乍看之下会考虑以下实现:

    lock (r_MappingLock)
    {
        int? retVal = null;

        if (i_MapObj.ContainsKey(i_Key))
        {
            retVal = i_MapObj[i_Key];
        }

        return retVal;
    }
Run Code Online (Sandbox Code Playgroud)

这将防止在更新字典时出现意外行为和返回值,但会出现另一个问题:由于执行上述方法的每个线程都试图声明锁定,这意味着如果多个线程尝试同时执行此方法,每个都必须等到前一个线程完成执行该方法并尝试声明锁定,这显然是一种不良行为,因为上述方法仅用于读取目的.

我想在类中添加一个布尔成员,该类将被设置为true或false,字典是否正在更新,并在"只读"方法中检查它,但这会产生其他基于竞争条件的问题......

任何想法如何优雅地解决这个问题?

再次感谢,

米奇

c# mutex locking race-condition

4
推荐指数
1
解决办法
4114
查看次数

写入outputstream处理时出现错误

我将在我的学术Java课程中建立一个httpserver,该服务器应仅支持基本的GET和POST请求。

我想知道是否存在一种处理错误的优雅方法,该错误发生在将 html文件流内容(以及我已经发送响应头)写入HttpServer输出流的过程中。

优雅的方式是指显示用户或将用户重定向到“内部服务器错误”错误页面。

我尝试使用501错误代码重新发送http响应标头,但是java抛出一个异常,声称标头已经发送过...

一种解决方法是将文件的内容读取到内存中,然后再发送标头和内容,但是可能会出现其他问题,此外,我不想在将大文件发送出去作为响应之前将其加载到内存中。

java error-handling http fileinputstream

4
推荐指数
1
解决办法
799
查看次数

运行需要MySql.Data的内置.NET应用程序

我在运行构建的.NET应用程序时遇到问题,我写道:

我的应用程序使用安装在我的系统上的最新MySql连接器,当我尝试将其添加为参考时,它显示为.NET 4 Framwork组件.

当我在环境中以调试模式运行我的应用程序时,一切都很好,但是当我尝试直接从"release"文件夹运行它作为独立应用程序时,我得到以下异常:

Unhandled Exception: System.IO.FileNotFoundException: Could not load file or ass
embly 'MySql.Data, Version=6.3.6.0, Culture=neutral, PublicKeyToken=c5687fc88969
c44d' or one of its dependencies. The system cannot find the file specified.
Run Code Online (Sandbox Code Playgroud)

知道怎么解决这个问题?

.net c# reference mysql-connector

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

Apache Tomcat MimeTypes - 任何获取它们的方法?

我正在为Apache Tomcat编写一个过滤器,我想知道是否有办法获取放置在/conf/web.xml文件配置文件中的mimetypes而不显式读取xml文件.Apache Tomcat库中是否有可用的东西?

tomcat java-ee servlet-filters mime-types

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

RoR - 在obj.reload之后的after_initialize回调中的不同object_id

我为我的项目编写了一个扩展ActiveRecord模型行为的方法,我已经删除了大部分内容,请考虑以下代码:

class ActiveRecord::Base

  def self.has_translations
    after_initialize :clear_translations_cache

    def clear_translations_cache
      binding.pry
      @_translations = {}
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

基本上,我想,当我@_translations实例变量得到清除.reload的情况下从数据库中,但由于某些原因,从数据库中获取现有对象,执行该填充的方法后@_translations,再执行object.reload,@_translations仍然包含相同的数据.

我确信在第一次从数据库中获取对象和调用时会执行回调.reload.我使用binding.pry来停止回调方法中的执行,但由于某种原因,self.object_id内部与我的原始对象.reload不同object_id,因此@_translations在原始对象中不会被清除.

附件是控制台输出:

1.9.3p194 :008 > s = TranslatedItem.first
   76:     def clear_translations_cache
=> 77:       @_translations = {}
   78:     end

[1] pry(#<TranslatedItem>)> self.class
=> TranslatedItem(id: integer, created_at: datetime, updated_at: datetime)
[2] pry(#<TranslatedItem>)> self.object_id
=> 70254243993580
[3] pry(#<TranslatedItem>)> exit
1.9.3p194 :009 > s.object_id
 => 70254243993580
1.9.3p194 :010 > …
Run Code Online (Sandbox Code Playgroud)

mysql metaprogramming ruby-on-rails

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

Java - 自定义类加载器 - 尝试使用类文件完整路径加载类

作为用于学术目的的 HTTP WebServer 项目的一部分,我正在尝试为 Web 应用程序类编写自己的自定义类加载器,但似乎无法正确完成。

一般来说,Web 应用程序位于它们自己的文件夹中,Web 应用程序的“.class”文件与其直接的父文件夹名称相同。(例如 Web1/Web1.class)。下面的代码可以正常工作,直到我到达该defineClass()方法,然后它会抛出以下异常:

java.io.FileNotFoundException: C:\inetpub\javawwwroot\WebApps\java\lang\Object\.Object.class (The system cannot find the path specified)

值得一提的是,下面代码中的C:\inetpub\javawwwroot\WebApps\部分等于m_WebAppsFullPath变量。

此外,当尝试使用

InputStream in = getResourceAsStream(clsFile);

代替 InputStream in = new FileInputStream(clsFile);

我得到一个空返回值...

更新:简而言之,如何加载既不在“CLASSPATH”中也不在我的项目的任何包中的特定类?

protected synchronized Class loadClass(String className, boolean resolve) 
                             throws ClassNotFoundException 
{
    log("Loading class: " + className + ", resolve: " + resolve);

    // 1. is this class already loaded?
    Class cls = findLoadedClass(className);
    if (cls != null)
    {
        return cls;
    } …
Run Code Online (Sandbox Code Playgroud)

java web-applications classloader

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