在.NET中利用Google JS V8 Engine实现脚本引擎
来源:互联网 发布:java常见类 编辑:程序博客网 时间:2024/06/05 14:35
原文地址:http://blog.csdn.net/wangjia184/article/details/8520725
在.NET中可供集成的脚本语言有很多种选择,LUA 和 Python 都有非常成熟的解决方案。而JavaScript作为一种比较流行的脚本语言,也是非常不错的选择。
既然要使用JavaScript作为脚本引擎中的脚本语言,那么就需要在.NET中引入JavaScript执行环境(JavaScript Engine).
开源的JavaScript Engine有很多,比如:
- Firefox中用到的SpiderMonkey
- Safari中用到的Squirrelfish
- Chrome中用到的V8
除了IE的JS Engine比较垃圾外,这3个经过多年的竞争后性能差距已经不再那么明显了。
node.js也采用V8作为底层的执行引擎且使用在服务器环境中,这足以证明V8的稳定性。所以这里选择Google V8 Engine 作为JS的脚本引擎集成到.NET中。
猛击这里可以下载示例代码,这是一个经典的Web Application, 演示最简单的使用过程。
使用方法
将示例工程中的GoogleV8Engine.cs文件复制到你的项目中。将GoogleV8Engine_x64.dll 和 GoogleV8Engine_x86.dll 两个非托管DLL文件拷贝到工程部署的DLL目录下(ASP.Net拷贝到bin目录, WinForm只需要和其它EXE/DLL放在一起即可).
做完上面的操作就可以开始使用了。JavascriptEngine类中有下列方法可供你调用
- void RegisterCommandCallback(CommandCallbackDelegate fun)
如果你需要在JS中使用_exeCommand主动调用.NET的代码,则可以使用此方法注册.NET中的回调函数。回调函数的参数定义如下:
/// <summary>/// 注册的回调方法,用于处理JS中的_exeCommand调用/// </summary>/// <param name="command">命令名称</param>/// <param name="arg1">参数1</param>/// <param name="arg2">参数2</param>/// <returns>返回给JS的字符串</returns>private string CommandCallback(string command, string arg1, string arg2){}
- string Execute(string)
此方法用于执行JS并返回执行结果。
线程安全性(Thread Safety)
Execute方法的调用中,非托管代码中利用V8的隔离(Isolate)模式来保证在不加锁的情况下的线程安全性。也就是说,多个线程对Execute方法的同时调用不会相互影响。
如果在多线程环境下,你可能需要借助TLS(Thread Local Storage)特性来回调函数中处理上下文相关的变量。因为设置的回调函数是全局的。
.NET与JS中 简单对象的转换
使用JavaScript作为脚本语言的一个优势, 就是能够很方便地用System.Web.Script.Serialization.JavaScriptSerializer 类 ,将 .NET中的对象(属性只具有通用的类型,如int/float/string/bool/循环或嵌套结构/等) 和JSON 对象之间相互装换。
修改非托管代码?
这里不提供非托管代码源代码。
- 在.NET中利用Google JS V8 Engine实现脚本引擎
- [V8] 在C++中应用Google Chrome脚本引擎——V8
- 在C++中应用Google Chrome脚本引擎——V8
- 在C++中应用Google Chrome脚本引擎——V8
- 在Android上使用Google V8 JS 引擎
- 如何在程序中嵌入google的V8 Javascript引擎
- 如何在程序中嵌入google的V8 Javascript引擎
- 如何在程序中嵌入google的V8 Javascript引擎
- 福音!JS脚本可视化调试支持——基于Google v8引擎的脚本调试
- JS脚本可视化调试支持——基于Google v8引擎的脚本调试
- 如何在.NET中实现脚本引擎 (CodeDom篇)
- 如何在.NET中实现脚本引擎 (CodeDom篇)
- 如何在应用程序中集成V8 JS引擎
- 在C++中嵌入JavaScript——Google V8 JavaScript Engine使用
- 在C++中嵌入JavaScript——Google V8 JavaScript Engine使用体验
- 在C++中嵌入JavaScript——Google V8 JavaScript Engine使用体验
- 在C++中嵌入JavaScript——Google V8 JavaScript Engine使用体验
- 在google app engine(GAE)中利用struts2
- android Button 切换背景,实现动态按钮和按钮颜色渐变
- Steps
- Ubuntu中快捷键的查看及设置
- 多核编程的四层境界
- SQL Server 2008 R2 安装
- 在.NET中利用Google JS V8 Engine实现脚本引擎
- NoSQL新贵MongoDB
- poj-1426-bfs取余
- Struts2中的设计模式----ThreadLocal模式续
- NoSQL数据库的详细分类
- 单源最短路问题
- C# 接口
- 新一轮IDCIICP牌照重新开始 国家调整数据中心建设的合理布局
- android surfaceflinger研究----显示系统