http://www.sufeinet.com/plugin.php?id=keke_group

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 6306|回复: 0

[JS] 在.NET中利用Google JS V8 Engine实现脚本引擎

[复制链接]
发表于 2016-2-24 12:46:34 | 显示全部楼层 |阅读模式

原文地址:http://blog.csdn.net/wangjia184/article/details/8520725


在.NET中可供集成的脚本语言有很多种选择,LUA 和 Python 都有非常成熟的解决方案。而JavaScript作为一种比较流行的脚本语言,也是非常不错的选择。


既然要使用JavaScript作为脚本引擎中的脚本语言,那么就需要在.NET中引入JavaScript执行环境(JavaScript Engine).

开源的JavaScript Engine有很多,比如:



除了IE的JS Engine比较垃圾外,这3个经过多年的竞争后性能差距已经不再那么明显了。

node.js也采用V8作为底层的执行引擎且使用在服务器环境中,这足以证明V8的稳定性。所以这里选择Google V8 Engine 作为JS的脚本引擎集成到.NET中。


猛击这里可以下载示例代码,这是一个经典的Web Application, 演示最简单的使用过程。




使用方法

将示例工程中的GoogleV8Engine.cs文件复制到你的项目中。将GoogleV8Engine_x64.dllGoogleV8Engine_x86.dll 两个非托管DLL文件拷贝到工程部署的DLL目录下(ASP.Net拷贝到bin目录, WinForm只需要和其它EXE/DLL放在一起即可).


做完上面的操作就可以开始使用了。JavascriptEngine类中有下列方法可供你调用



  • void RegisterCommandCallback(CommandCallbackDelegate fun)如果你需要在JS中使用_exeCommand主动调用.NET的代码,则可以使用此方法注册.NET中的回调函数。回调函数的参数定义如下:
    [csharp] view plain copy
    print?



    • /// <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 对象之间相互装换。



修改非托管代码?
这里不提供非托管代码源代码。


1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-5-4 09:53

© 2014-2021

快速回复 返回顶部 返回列表